Gonzalo Castro saw an effort cleared off the line in a first half dominated by the hosts, while Ciro Immobile was denied BVB's best chance by a fine Bernd Leno save early in the second.
Dortmund went into the game rock-bottom of the standings following SC Freiburg's earlier win over Eintracht Frankfurt, but at least had history on their side with Jürgen Klopp unbeaten in his last eight trips to Leverkusen as a head coach. The BVB strategist named returning attacker Marco Reus and winter recruit Kevin Kampl in his starting XI, while Matthias Ginter got the nod in front of the back four alongside fit-again Turkish international Nuri Sahin.
Reus had already enjoyed more touches - 22 - than any of his Dortmund team-mates at the midway point in the half, albeit with Leverkusen goalkeeper Leno for the most part untested. Sahin chanced his arm from the edge of the area, before Roman Weidenfeller was called on at the other end to make a routine save from a Hakan Calhanoglu free kick.
Bellarabi to the fore
Despite creating little by way of clear-cut openings, Leverkusen carried by far the greater threat. Karim Bellarabi was making a particular nuisance of himself on the right-hand side and it was no surprise to see the Germany international at the heart of the best move of a measured first half. Castro was the beneficiary of the 24-year-old's surging 38th-minute run, but Mats Hummels was well-stationed to head the midfielder's goal-bound strike off the line.
Klopp had further reason to grumble when Weidenfeller was forced to scoop a deflected Bellarabi cross over the bar on the stroke of half time. An injury to Lukasz Piszczek didn't help matters, especially given the fact BVB had scored just eight and conceded 17 second-half goals in the league so far this season, although Immobile gave his side welcome cause for optimism in that department after testing the reflexes of Leno within five minutes of the restart.
Castro goes close
Dortmund continued to pose questions of Leverkusen's tiring back line as Immobile teed up Reus, who had his pockets picked at the last by Calhanoglu. The home side's energy levels appeared to be on the wane, but they still managed to piece together one of the game's more presentable opportunities with 15 minutes still to play. Castro, though, could only find the roof of the net following an incisive break.
The chances dried up towards the end of the encounter, despite the introduction of Dortmund striker Adrian Ramos, meaning Klopp's beleaguered ensemble start the new year in a worse position to which they ended the last: bottom of the table in 18th place.
Line-ups and statistics