Czy protokół jest zaimplementowany poprawnie?

Nawet najlepszy protokół może być niebezpieczny, jeśli zostanie błędnie zaimplementowany. Może używasz protokołu, w którym nie ma polecenia „zamknij system”, ale twój serwer i tak zamyka system, gdy otrzyma błędne polecenie.

Jest to przykład złego programowania, przerażająco powszechnego. Choć niektóre subtelne i trudne do uniknięcia ataki wiążą się z nakłanianiem serwerów do zrobienia czegoś, co nie jest częścią realizowanego przez nie protokołu, byłyby nieskuteczne, gdyby w programach nie istniały zupełnie oczywiste błędy. Liczba komercyjnych programów, które otrzymałyby ocenę niedostateczną na podstawowym kursie programowania, jest wręcz niewiarygodna.

Aby program był bezpieczny, musi ostrożnie posługiwać się danymi. Ważne jest zwłaszcza to, żeby program weryfikował swoje założenia co do danych, które pochodzą z potencjalnie wrogich źródeł. Które źródła należy uznać za potencjalnie niebezpieczne, to zależy od środowiska, w którym działa program. Jeśli program działa w zabezpieczonym hoście bastionowym, który nie ma żadnych wrogich użytkowników, a ty godzisz się z tym, że każdy napastnik po uzyskaniu dostępu do komputera będzie miał pełną kontrolę nad programem, jedynym źródłem wrogich danych będzie sieć.

Z drugiej strony, jeśli komputer ma potencjalnie wrogich użytkowników albo chcesz utrzymać pewien poziom bezpieczeństwa nawet wtedy, gdy napastnik uzyska ograniczony dostęp do komputera, wówczas nie możesz ufać żadnym danym wejściowym, a więc argumentom wiersza polecenia, danym konfiguracyjnym (z plików konfiguracyjnych albo menedżera zasobów), danym będącym częścią środowiska wykonawczego oraz pochodzącym z sieci.

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>