Przepełnienie bufora - ataki na programy użytkownika


Metodą jest pisanie programów niepodatnych na przepełnienie bufora. Możliwość przepełnienia występuje tylko w przypadku niedopatrzenia lub niechęci pisania poprawnego kodu przez programistę. Niechęć ta wynika z tego, że pisanie w pełni bezpiecznego kodu jest pracochłonne.

Istnieje kilka zabezpieczeń na wypadek błędu programisty. Należą do nich:
  1. uczynienie stosu programu niewykonywalnym, co zapobiega wykonaniu kodu podanego przez użytkownika jako wejście. Jednakże nie jest to do końca możliwe, ponieważ np. przy obsłudze sygnałów wykorzystuje się stos do przekazania kodu wykonywalnego dla procesu. Nie zapobiega też atakom przez umieszczenie kodu zainfekowanego na stercie.

  2. kompilatory, które zwracałyby baczną uwagę na operacje arytmetyczne na wskaźnikach. Należą do nich Compaq C Compiler czy patch na gcc Johnes'a i Kelly'ego.
    Compaq C Compiler bada poprawność odwołań postaci tab[5], ale nie *(tab+5), natomiast programy kompilowane gcc z nakładką w.w. panów działają nawet kilkadziesiąt razy wolniej niż bez niej.

  3. używanie bezpiecznych języków programowania jak np. Java. Jednakże warto w tym miejscu warto wspomnieć, że JVM jest napisana w C oraz że nie rozwiązuje to problemu istniejącego już oprogramowania.



dalej