German Denis put the hosts ahead from the penalty spot after the hour mark before Maximiliano Moralez made it 2-0 in the 86th minute.
Substitute Sebastian Leto gave Catania a lifeline by pulling a goal back with a minute to go but the Sicilian club could not find the equaliser.
The outcome was Atalanta's sixth win of the campaign, their first since November 10, and moved the Bergamo side to 12th in the standings.
Catania, meanwhile, remained winless on the road this season and rooted at the foot of the table.
Catania, coming off a 2-0 home success against Bologna that ended a two-month winless run of their own, had the first chance in the eighth minute.
Gonzalo Bergessio fed Pablo Barrientos just outside the area but his shot was kept out by Atalanta goalkeeper Marco Sportiello.
Atalanta wasted a good chance to go in front before half-time when an unmarked Davide Brivio got his head behind Yohan Benalouane's cross and his powerful effort failed to find the target.
The hosts surged forward more aggressively after the break and in the 49th minute Catania goalkeeper Alberto Frison made a good save to clear Denis' drive from 30 yards.
Frison then twice denied Giacomo Bonaventura, palming his header over the bar before fully stretching to clear another goal-bound effort.
In the 57th minute, Francesco Lodi made a vital goal-line clearance from Guglielmo Stendardo's header with Frison already beaten.
Atalanta finally went ahead in the 67th minute.
The referee pointed to the penalty spot after Bonaventura was brought down by Cristiano Biraghi in the area, and Denis drove the resulting kick past Frison.
Atalanta defended deeply following that goal and Catania struggled to find a way through.
A counter-attack then saw Atalanta double their lead.
Bonaventura fed Moralez in the area and his left-footed strike from 12 yards beat Frison.
Catania reduced the deficit when Leto got on the end of substitute Kingsley Boateng's pass and struck a left-footed shot past Sportiello, but the visitors could not get any closer.