Despite having the better of the play early on, Milan found themselves 1-0 down after 25 minutes. Hernanes picked up the ball and went on a mazy run, before seeing his shot deflected past Marco Amelia.
The away side nearly equalised immediately, but Stephan El Shaarawy's effort was cleared off the line.
Milan continued to have a lot of the ball, but it was Lazio who doubled their lead five minutes before the break through Antonio Candreva.
Four minutes into the second half, Miroslav Klose was left unmarked in the box to finish easily and make it 3-0.
The away team tried to build on their goal but struggled to break down the Lazio defence. El Shaarawy managed to get them within one goal as the winger dribbled in off the left and fired the ball into the corner from long range.
Milan brought on Bojan towards the end and threw everything at Lazio, but the home team held on to grab all three points.