Obsah
Command Injection
Command Injection je útok, při kterém je cílem vykonání neoprávněných příkazů na operačním systému. Útočník zneužívá nedostatečné zabezpečení aplikace, která nesprávně filtruje vstupy a dovoluje „přilepit“ systémové příkazy k těm legitimním.
Tato zranitelnost může vést k úplnému ovládnutí serveru, krádeži dat nebo smazání celého systému.
Jak útok probíhá?
Představte si webovou aplikaci, která umožňuje správci sítě otestovat dostupnost jiného serveru pomocí příkazu ping.
Původní kód na pozadí (PHP příklad):
$target = $_GET['ip']; system("ping -c 4 " . $target);
Normální použití:
Uživatel zadá IP: 8.8.8.8
Systém vykoná: ping -c 4 8.8.8.8
Útok (Injection):
Útočník zadá do pole pro IP: 8.8.8.8 ; cat /etc/passwd
Systém vykoná: ping -c 4 8.8.8.8 ; cat /etc/passwd
Díky středníku (separátor příkazů v Linuxu) systém nejprve vykoná ping a hned poté vypíše obsah souboru s uživatelskými účty.
Klíčové techniky a operátory
Útočníci používají různé znaky v závislosti na operačním systému, aby řetězili příkazy:
| Operátor | Funkce | Systém |
|---|---|---|
| ; | Spustí druhý příkaz po prvním. | Linux / Unix |
| & | Spustí příkaz na pozadí. | Linux / Windows |
| && | Spustí druhý příkaz pouze pokud první uspěje. | Linux / Windows |
| \| | Pošle výstup prvního příkazu do druhého (Pipe). | Linux / Windows |
| \|\| | Spustí druhý příkaz pouze pokud první selže. | Linux / Windows |
| ` nebo $( ) | Vykonání vnořeného příkazu. | Linux / Unix |
Důsledky útoku
- Exfiltrace dat: Útočník může číst konfigurační soubory, databáze nebo zdrojové kódy.
- Vzdálený přístup (Reverse Shell): Útočník spustí příkaz, který server donutí připojit se k jeho počítači a předat mu ovládání (příkazovou řádku).
- Lateral Movement: Útočník využije napadený server jako odrazový můstek pro útok na další počítače ve vnitřní síti.
- Destrukce: Smazání databází nebo celého disku (např. pomocí příkazu
rm -rf /).
Jak se bránit?
Obrana proti Command Injection stojí na třech pilířích:
1. **Vyhýbání se systémovým voláním:** Pokud je to možné, nepoužívejte funkce jako ''system()'', ''exec()'' nebo ''passthru()''. Většina programovacích jazyků má vestavěné funkce (API), které nepotřebují volat shell (např. pro práci se soubory nebo sítí). 2. **Validace vstupu (White-listing):** Povolte pouze znaky, které očekáváte. Pokud očekáváte IP adresu, povolte pouze čísla a tečky. Vše ostatní zahoďte. 3. **Použití vestavěných funkcí pro únik (Escaping):** Pokud musíte volat shell, použijte funkce, které nebezpečné znaky zneškodní (např. ''escapeshellarg()'' v PHP). 4. **Princip nejnižších privilegií:** Webový server by nikdy neměl běžet pod účtem správce (root/admin). Pokud je napaden, útočník má omezené možnosti.
Související pojmy: SQL Injection, Malware, Rootkit, Shell, PHP, Kybernetická bezpečnost, Server.
