Zastąpienie krytycznych plików systemowych plikami tekstowymi

Przypuśćmy, że masz serwer, który pozwala użytkownikom na podanie imienia, którym chcieliby się posługiwać, aby mógł witać ich komunikatem „Cześć, Janek!”. Serwer pyta użytkownika o imię lub przydomek, a następnie zapisuje go w pliku. Użytkownik nie określa nazwy tego pliku jest ona zdefiniowana w pliku konfiguracyjnym, odczytywanym podczas uruchamiania serwera. Nazwa pliku z pseudonimami będzie więc zapisana w pewnej zmiennej. Jeżeli ta zmienna zostanie nadpisana, wówczas program zacznie zapisywać pseudonimy w pliku o nowej nazwie. Jeśli program działa jako użytkownik uprzywilejowany, ten plik może być ważnym składnikiem systemu operacyjnego. Bardzo nieliczne systemy operacyjne działają dobrze, gdy zastąpisz krytyczne pliki systemowe plikami tekstowymi. Wreszcie nadpisana pamięć może wcale nie zawierać danych, ale przewidziane do wykonania instrukcje. I w tym przypadku zwykle spowoduje to załamanie programu, ponieważ rezultat nie będzie poprawną sekwencją instrukcji. Jeśli jednak dane wejściowe są specjalnie dopasowane do architektury komputera, w którym działa program, mogą zawierać poprawne instrukcje. Atak ten jest dość trudny technicznie

i zwykle specyficzny dla konkretnego komputera oraz systemu operacyjnego atak, który działa w komputerach Suna z systemem Solaris nie zadziała w komputerze Intela z tym samym systemem, podobnie jak atak na ten sam komputer Intela z systemem

Windows 95. Jeśli nie możesz przenosić programów binarnych między dwoma komputerami, nie będą one podatne na dokładnie tę samą formę ataku. Zapobieganie atakom „przepełnienia bufora” to kwestia rozsądnego programowania sprawdzania, czy dane wejściowe mieszczą się w oczekiwanych granicach. Niektóre języki programowania automatycznie testują rozmiar danych wejściowych, co zapobiega przepełnieniom bufora. W szczególności, C tego nie robi, natomiast Java tak.

Leave a reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>