Despite long since being eliminated from the competition, Krstanovic's goal sparked wild celebrations among the Croatian fans while the visitors settled for a parachute place in the Europa League.
Despite the match being temporarily delayed due to heavy snow in the first half, Zagreb started with plenty of intent, with Luis Ibanez seeing a long-range shot blocked by Ognjen Vukovic and a Duje Cop effort rebounding off the bar.
Cop and team-mate Jorge Sammir both came close again as the hosts continued to impress while the Ukrainians seldom threatened, their best chance coming when Zagreb keeper Ivan Kelava fumbled a Miguel Veloso cross.
But after Sammir had missed another fine chance for the hosts, the visitors grabbed a scarcely deserved lead on the stroke of half-time when Andriy Yarmolenko drove home a fine opener from the edge of the box.
Ibanez missed a chance to equalise early in the second half but conditions ensured chances were at a premium, with both sides guilty of hitting speculative long balls towards their stranded strikers.
Fatos Beqiraj should have done better with a great chance in the 65th minute which he flashed wide of target, while a dangerous-looking cross by Sime Vrsaljko was gathered by Kiev keeper Maksym Koval eight minutes later.
Zagreb continued on their admirable quest to have something to show from their efforts in the group stage, Krstanovic driving in a close-range shot only for it to be blocked in the box by Ebert Betao, before Kelava wasted a good free-kick.
Then, with over five minutes of stoppage time played, Zagreb finally got their reward when Kiev keeper Koval was ruled to have fouled Krstanovic in the box, allowing the striker to step up to the spot and sweep the equaliser into the bottom corner.