Silva scores for both sides in Milan win
The centre back nodded in an Andrea Pirlo free kick from the left to put Milan ahead in the 22nd minute with his maiden Serie A goal.
His compatriot Pato also used his head to good effect to put away a Ronaldinho cross and make it 2-0 10 minutes before the break before Silva unluckily deflected a Mauro Zarate shot into his own net in the 65th minute to set up a nervy climax.
The visitors held out under pressure to continue their recovery from a shaky start with a win that gives them 22 points from 12 games.
They are two points behind second-placed Juventus, who won 5-2 at Atalanta on Saturday, and seven adrift of champions Inter Milan, who drew 1-1 with AS Roma.
Lazio coach Davide Ballardini is now in serious danger of losing his job as his side have not won in the league since August and were hammered 4-1 at Villarreal in the Europa League on Thursday.
Milan leapfrogged Sampdoria, who lost 2-0 at Cagliari after having Marius Stankevicius sent off for a foul at the end of the first half.
Samp share fourth place with Fiorentina after the Tuscan team beat Udinese 1-0 away thanks to Juan Vargas's free kick six minutes from time.