A woeful defensive error from Shakhtar enabled Benzema to give Madrid the lead in the 14th minute, Los Blancos becoming the first team to reach 1,000 Champions League/European Cup goals.
Shakhtar responded superbly and levelled matters when Fernando powered home their first goal of the group stage.
Yet Madrid was much improved in the second half, and predictably it was Benzema who provided the decisive touch after wonderful build-up play from Vinicius Junior and Casemiro.
Luka Modric could have given Madrid the lead in the fifth minute as he was played in on goal at the end of a well-worked move only to be thwarted by a superb save by Anatolii Trubin.
Alan Patrick offered an early glimpse of Shakhtar's threat when he hit the post with a long-range drive, but the visitors then gifted Madrid their landmark goal in bemusing fashion.
Trubin played a short pass out to Marlon Santos, only for the centre-back to immediately cede possession to Vinicius, who teed up Benzema for a simple tap-in.
Modric was again thwarted by Trubin before Fernando was unfortunate to see an effort deflected wide as Shakhtar continued to pose Madrid problems.
Fernando got the equaliser Shakhtar's response to the goal deserved, lashing a volley beyond Thibaut Courtois from Patrick's chest down, and it needed a fine save from the Belgium international to prevent the same pair from combining to put the visitors ahead before half-time.
But Shakhtar was left to rue its earlier profligacy as Vinicius and Casemiro played a silky one-two before the former again supplied the pass for Benzema to secure maximum points for Madrid with his 61st-minute effort.