Ballacks mål var frukten av en stark andra halvlek av tyskarna.
Oliver Neuville hade bara varit på plan i knappa fyra minuter då han slog in kvitteringen till 1-1.
I den 83:e minuten föll så Ballacks mål. Frisparken var välplacerad och hårt slagen.
Palermos Bosko Jankovic gav Serbien ledningen efter 18 minuters spel.
Startelvor:
Tyskland:
Lehmann - Lahm, Mertesacker, Metzelder, Jansen - Frings, Ballack - C. Fritz, Schweinsteiger - Kuranyi, Gomez
Serbien:
Stojkovic - Rukavina, Ivanovic, Vidic, Dragutinovic - Babovic - Kuzmanovic, Smiljanic - Jankovic - Pantelic, S. Ilic
Mål:
0-1 Jankovic (18), 1-1 Neuville (74), 2-1 Ballack (82).