Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
1.3.SłynneprzykładyaWariioprogramoWania
Koszttejawariiszacujesna60milionó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ędzieumacząceprogramnapisanywjęzykuwy-
sokiegopoziomunajegoodpowiednikwjęzykumaszynowym[7]
Błądprzepełnieniawprocesiedlaprotokołu
finger
.W1988rokuRobertMorris
stworzyłpierwszegowhistoriirobakainternetowego(worm),któryjakpodająróżne
źródłazainfekował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żebdokonanenadwasposoby:
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
wykonasmnożenie85077,1,tozamiastoczekiwanegowyniku65535Excelzwraca...
100000.Okazałosię,żeproblemdotyczyłtylkosposobuprezentacjiwartościExcelobli-
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łjakzwiązekztymfaktem.Dowy-
9