Federer, who received a bye in the quarter-finals after Nick Kyrgios was forced to withdraw through food poisoning, took just 75 minutes to dispatch of the American 6-1 7-6(4) and set up a showdown with compatriot Stanislas Wawrinka in the final.
The four-time champion made short work of Sock in the opening set, reeling off five games in a row at the end to wrap it up after just 21 minutes, needing just two break points in the process.
The world number 18 put up more of a fight in the second set, though, as both players held serve throughout to force a tie-break.
Sock took an early 3-1 lead in the breaker as he looked to push the match towards a decider, but Federer stormed back to win six of the next seven points to seal his place in a seventh Indian Wells final.
Federer will face Wawrinka in the final after the world number three beat Pablo Carreno-Busta in straight sets to win the first semi-final.
Wawrinka took just over an hour to record the 6-3 6-2 triumph, breaking Carreno-Busta in the penultimate game of the first set before doing so twice again in the second to make it into the final for the first time in his career.