While low on spectacle and scoring opportunities, the match marked Ulster's fourth consecutive victory over Italian competition.
There was a welcome return to first team action for veteran centre Paddy Wallace, rehabilitated after nine months out of the game with a cruciate ligament injury.
Chances were few and far between in a first half which the visitors controlled in the main, although Ulster proved the more opportunistic of the two sides with a converted try just edging two penalties from the Italians.
Zebre took a surprise early lead when Luciano Orquera angled in a third minute penalty from wide on the left, which he could have doubled up four minutes later had his strike from just inside the Ulster half not fallen short and wide.
Ulster then ignited into action, with good work from Wallace in particular in midfield, until the move broke down when a poor kick from James McKinney was easily charged down.
The Italians' next attack earned them another penalty, dispatched by Tomasso Iannone in the absence of a recently-injured Orquera.
And although certainly still under the cosh as the clock hit 20 minutes, Ulster continued to show some neat touches, notably a smart dummy from Jared Payne as he let Wallace's pass spin by him to Michael Allen on the left wing.
However, game-time in opposition territory was scant until Ruan Pienaar belted a penalty deep into the Zebre 22 on 25 minutes, and from the lineout Wallace was desperately unlucky not to mark his return with a try, just losing his grasp on the ball as he approached the line.
The eventual Zebre clearance was poor though, and quick ball from Ulster's next lineout created the space for Payne to burst through the heart of the Italian rearguard, evading four tackles to ground an outstanding individual try beneath the posts.
Pienaar's conversion inched Ulster into a 7-6 lead on the half hour, and good placement of a penalty from the scrum half seven minutes later had his side back in the danger zone again.
Rapid recycling from Niall Annett's lineout promised much until the ubiquitous Payne was unfortunate to knock on a slippery ball metres from home.
Ulster barged their way into the second half in good fettle, Pienaar extending the lead on 48 minutes courtesy of a central penalty.
However, neither side threatened again until just after the hour mark, when an Ulster steal at a Zebre lineout looked promising until blighted by yet another knock on.
Orquera kicked a 68th minute penalty deep into touch in the hope of a drive from the lineout, but Ulster pinched possession once more at the set piece.
Mark Anscombe's men then set the wheels in motion for the move which earned Pienaar a penalty on the Zebre 22, and he duly slotted the kick home to give his side a little more breathing space.
The 13,937-strong Ravenhill crowd waited in expectation for a flash of brilliance from Ulster to put the game to bed, but as the clock wound down the inspiration never came, and indeed Zebre played out the game in possession - albeit deep in their own half.
Next up for Ulster are interprovincial rivals - and two sides also riding high in the league table - Leinster and Munster either side of the New Year, two key clashes which will doubtless have a major bearing on the top four PRO12 standings come May.