Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
1.3.SłynneprzykładyaWariioprogramoWania
Koszttejawariiszacujesięna60milionówdolarów.Obecniewiększośćkompila-
torówmamechanizmy,którepodczaskompilacjiwykonująelementyanalizystatycznej
koduipotrafiąostrzecprzedhpodejrzanym”użycieminstrukcjibreak.Problemmógłby
równieżzostaćrozwiązanyzapomocąinspekcjiformalnychczyprzeglądówkodu.
kompilator(ang0compiler)–narzędzietłumacząceprogramnapisanywjęzykuwy-
sokiegopoziomunajegoodpowiednikwjęzykumaszynowym[7]
Błądprzepełnieniawprocesiedlaprotokołu
finger
.W1988rokuRobertMorris
stworzyłpierwszegowhistoriirobakainternetowego(worm),który–jakpodająróżne
źródła–zainfekowałoddwóchdosześciutysięcykomputerów.Robakwykorzystywał
trzytechnikiataków,przyczymtą,któraodniosłanajwiększysukceswprocesieinfeko-
waniabyłametodaprzepełnieniabufora.Unixowyprocesfingerwykorzystywałpolece-
niegets,którepobieraciągznakówzestrumieniawejściowego.Pobranieciąguwejścio-
wegomożebyćdokonanenadwasposoby:
char*fgets(char*restrictstr,
intsize,FILE*restrictstream);
char*gets(char*str);
Listing1.2.Dwasposobypobraniaciąguznakówzestrumieniawejściowego
Wdrugimprzypadkuargumentfunkcjigetsniemaograniczenianadługośćłańcucha
str.Zbytdługiłańcuchwejściowymożespowodowaćprzepełnieniebufora,copowodu-
jenadpisaniestosuimożliwośćprzejęciakontrolinadkomputerem.Testowaniewarto-
ścibrzegowych,uwzględniająceekstremalnewartościidługościużywanychzmiennych,
zwyklebywabardzoskutecznewwykrywaniutegotypuproblemów.Dobrerezultatydadzą
teżmetodytestowaniaopartenadoświadczeniulubnadefektach(tzw.atakusterkowy).
przepełnieniebufora(ang0bufferoverflow)–wyjątekdostępudopamięcinaskutek
usiłowaniaumieszczeniaprzezprocesdanychpozagranicamiwyznaczonegobufora.
Wrezultaciezostająnadpisanesąsiednieobszarypamięci;patrztakże:bufor
BłądwMSExcel2007.23września2007rokunagrupiedyskusyjnejpoświęconej
ExcelowiużytkownikMolhamSerryzgłosiłbłądpolegającynatym,żejeżeliwExcelu
wykonasięmnożenie850⋅77,1,tozamiastoczekiwanegowyniku65535Excelzwraca...
100000.Okazałosię,żeproblemdotyczyłtylkosposobuprezentacjiwartości–Excelobli-
czałdziałaniepoprawnie,aleprzyprezentowaniuwynikunaekranwypisywałbłędnąwar-
tośćnaskutekdefektuwkodzieformatującymwypisywanewartości.Zwróconawartość
65535jestnajwiększąliczbącałkowitą,jakąmożnazapisaćwzmiennej16-bitowej.Praw-
dopodobniekodformatującywyświetlanywynikmiałjakiśzwiązekztymfaktem.Dowy-
9