Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
TEMATNUMERU
Testowaniezapomocąfuzzingu
Fuzzingiposzukiwaniebezpieczniejszegooprogramowania
Zaśmiecanie
Fuzzingtoważnametodawyszukiwaniabłędówilukwzabezpieczeniachoprogramowania.
Wniniejszymartykulewyjaśniamy,czymjestfuzzingijakiejegometodydziśpowszechnie
stosowane.AndreasZeller
Tobyłaciemnaiburzowanoc.BartMiller
mainframenależącymdoUniwersytetuWisconsin.
(zktórymwywiadumieściliśmynakońcu
tegoartykułu)pracowałwdomu,połączony
1200-bodowymmodememzkomputeremtypu
Jednakkażdeuderzeniepiorunapowodowało,żecoś
poszłonietak:piorunzakłócałtransmisjędanychprzez
liniętelefonicznąizniekształcałposzczególneznaki,
zmuszającMilleradociągłychrestartów.
Zakażdymrazem,gdyponownienawiązywałpołą-
czenie,zauważał,żewieleprogramównieradzisobie
zuszkodzonymidanymizawieszałysię,wyświetlały
błędylubnagleprzestawałydziałać.Czyprogramynie
powinnyznacznielepiejradzićsobieznieprawidłowy-
milubuszkodzonymidanymiwejściowymi?Millerpo-
stanowił,żejegouczniowiebędąsystematyczniebadać
tenproblemidałimzadanieprogramistyczne.
Tejjesiennejnocy1988rokuumownienarodziłsię
fuzzing,zdecydowanienajważniejszaobecniemetoda
testowaniaprogramówpodkątemodpornościnabłę-
dyisprawdzanialukwzabezpieczeniach.Profesjonalni
programiścirutynowoużywająfuzzingudoprowoko-
waniaproblemów,któremogąwystąpićpowydaniu
bądźwdrożeniudanegooprogramowaniuiktóreczęsto
trudnoprzewidzieć.Jednakfuzzingjestnadaltajemnicą
dlawieluprogramistówpracującychwniepełnymwy-
miarzegodzinizaawansowanychużytkowników,któ-
rzyprogramująnieformalnie(wtymwieluczłonków
społecznościLinuksa).Wtymmiesiącuprzyjrzymysię
bliżejfuzzingowiiwyjaśnimy,dlaczegojesttakważny.
Czymjestfuzzing?
Odpowiedźnatopytaniemożnaznaleźćwzadaniu,któ-
reBartMillerprzygotowałswoimstudentom:UCelem
tegoprojektujestocenaodpornościróżnychprogra-
mównarzędziowychdziałającychwsystemieUnixna
strumieńnieprzewidywalnychdanychwejściowych.
Tenprojektskładasięzdwóchczęści.Najpierwpowi-
nieneśzbudowaćgenerator,którywytworzylosowy
strumieńznaków.Następnieweźmieszgeneratoriuży-
jeszgodozaatakowaniajaknajwiększejliczbynarzędzi
uniksowych,próbującjepopsuć”.
Tozadanieprogramistycznepodsumowujepodstawo-
ideęfuzzingu:automatyczniegenerujemylosowe
danewejściowe,poczymsprawdzamy,czyzasilanenimi
programyrobiąnieprzewidywalnerzeczy;tedwiefazy
powtarzamyczęstoiszybko.
Wtymprocesiefuzzerywykorzystująróżnetechni-
kiwyszukiwaniabłędów
.Najprościejjestwygenerować
czystolosowedanewejściowe;wtensposóbmożnazna-
leźćbłędywprzetwarzaniudanychwejściowych,takie
jakprzepełnieniebufora.Fuzzeryopartenamodelach
wykorzystujągramatykiiinnemodelejęzykowedoge-
nerowaniaprawidłowychiukierunkowanychdanych
wejściowych.Fuzzeryopartenaewolucjimutujądane
wejściowe,abyznaleźćwarianty
,którespowodująwyko-
naniejaknajwiększychobszarówkodu.Fuzzeryoparte
naograniczeniachmogąwykorzystywaćzłożoneograni-
czeniawkodzieprogramu,alezajmujetodużoczasu.
Polskietłumaczeniesłowa„fuzzing”
Naraziesłowo„fuzzing”niemadobregoodpowiednika
wjęzykupolskim.Niektórzyautorzyużywająterminu„testy
rozmyte”
,przezanalogiędo„logikirozmytej”(ang.fuzzylogic)
ipowiązanychpojęć(takichjakzbiórrozmytyczyimplikacja
rozmyta).Naszymzdaniemniejesttoidealnerozwiązanie:
wlogicerozmytejmamyfaktyczniedoczynieniazeswojego
rodzajurozmyciemterminommałoprecyzyjnym(czyliwła-
śnie„rozmytym”),takimjak„ciepły”czy„zimny”przypisywane
precyzyjnezakresywartości.Natomiastwfuzzinguchodzi
oprzekazywanieprogramomnieprawidłowychdanychwej-
ściowych,częstolosowych(słowo„fuzz”oznaczadosłownie
kłaczkikurzu).Byćmożewięczamiast„testowaniarozmytego”
bardziejprecyzyjnymchoćmałoeleganckimpolskimodpo-
wiednikiembyłobypoprostu„zaśmiecaniewejścia”
.
8
MARZEC2022
NUMER217
LINUX-MAGAZINE.PL