Polecenie strings i niezaufane pliki binarne
Napisał: Patryk Krawaczyński
05/10/2023 w Bezpieczeństwo Brak komentarzy. (artykuł nr 874, ilość słów: 410)
P
olecenie ldd nie jest jedynym programem, który miał problemy z bezpieczeństwem jeśli chodzi walidację danych podczas analizy różnych programów. W 2014 roku Michał Zalewski ostrzegał, że wielu użytkowników zajmujących się informatyką śledczą lub innymi dziedzinami bezpieczeństwa informacji ma zwyczaj uruchamiania programu /usr/bin/strings na plikach binarnych pochodzących z internetu. Skoro narzędzie to po prostu skanuje zawartość pliku w poszukiwaniu ciągów znaków, które można wyświetlić na standardowym wyjściu (stdout) to nie powinno narazić użytkownika na jakiekolwiek ryzyko. Otóż program strings jest integralną częścią GNU binutils – zestawu narzędzi specjalizujących się w manipulowaniu formatami plików wykonywalnych przy użyciu biblioteki o nazwie libbfd (Binary File Descriptor Library).
Jak udowodnił lcamtuf funkcja setup_group
w źródłowym pliku bfd/elf.c
biblioteki libbfd wchodzącej w skład binutils w wersji 2.24 i wcześniejszych posiadała podatność bezpieczeństwa. Jeśli użytkownik zostałby nakłoniony do analizy programem strings specjalnie spreparowanego pliku, mogłoby to spowodować krach tego narzędzia lub potencjalne wykonanie dowolnego kodu z uprawnieniami użytkownika uruchamiającego proces analizy. Dlatego od wersji 2.26 wydanej 26 stycznia 2014 roku domyślnym wywołaniem strings jest parametr -a
, który powoduje skanowanie całego pliku z pominięciem używania biblioteki BFD:
commit 7fac9594c41ab180979bdf5927ff7f7e1d13a9e9 Author: Nick CliftonDate: 2014-10-31 10:10:37 +0000 In response to a public outcry the strings program now defaults to using the --all option which displays text from anywhere in the input file(s). The default used to be --data, which only displays text from loadable data sections, but this requires the use of the BFD library. Since the BFD library almost certainly still contains buffer overrun and/or memory corruption bugs, and since the strings program is often used to examine malicious code, it was decided that the --data option option represents a possible security risk.
W celu użycia ponownie biblioteki BPD musimy użyć parametru -d
(--data
), aby wyświetlić ciągi znaków tylko z zainicjalizowanych i załadowanych sekcji danych w pliku. Może to zmniejszyć ilość śmieciowych danych na wyjściu, ale należy pamiętać, że naraża to także program na wszelkie luki w bezpieczeństwie, które mogą być jeszcze obecne w bibliotece BFD używanej do skanowania i ładowania takich sekcji.
Więcej informacji: PSA: don’t run ‘strings’ on untrusted files (CVE-2014-8485), CVE-2014-8485, Scan the whole file commit