2019幎ã®å§ãŸããããéå»ãæãåºããŠæªæ¥ãèããã®ã¯è¯ãããšã§ãã 30幎ãæ¯ãè¿ãããã¡ãžã³ã°ã«é¢ããæåã®ç§åŠèšäº
ãUNIXãŠãŒãã£ãªãã£ã®ä¿¡é Œæ§ã«é¢ããå®èšŒçç 究ããšããã®åŸã®åãèè
Barton Millerã« ãã 1995幎ã®ç 究
ãRevision of Fuzzingããæ¯ãè¿ããŸãããã
ãã®èšäºã§ã¯ããªãªãžãã«ã®ãã¡ãžã³ã°äœæ¥
ãšåãããŒã«ã䜿çšããŠ
ã Ubuntu Linuxã®ææ°ããŒãžã§ã³ã®ãã°ãèŠã€ããããšããŸãã ã³ã³ããã¹ãã ãã§ãªããç解ã®ããã«ãå
ã®ããã¥ã¡ã³ããèªãå¿
èŠããããŸãã 圌ãã¯ãä»åŸæ°å幎éãè匱æ§ãšãšã¯ã¹ããã€ãã«é¢ããŠéåžžã«äºèšçã§ããããšãå€æããŸããã 泚ææ·±ãèªè
ã¯ãå
ã®èšäºã®çºè¡æ¥ïŒ1990幎ã«æ°ä»ããããããŸããã ããã«æ³šæãæããšããœãŒã¹ã®ã³ã¡ã³ãã«èäœæš©ã衚瀺ãããŸãïŒ1989
çãã¬ãã¥ãŒ
ããã¥ã¡ã³ããèªãã§ããªã人ã®ããã«ïŒããã¯å®éã«è¡ãããã¹ãã§ããïŒããã®ã»ã¯ã·ã§ã³ã«ã¯ç°¡åãªèŠçŽãšããã€ãã®éžæãããåŒçšãå«ãŸããŠããŸãã
ãã¡ãžã³ã°ããã°ã©ã ã¯ãå°å·ãããæåãŸãã¯å°å·ãããŠããªãæåã®ã¿ãçæããæ©èœã䜿çšããŠãã©ã³ãã ãªæåã¹ããªãŒã ãçæããŸãã ç¹å®ã®åæå€ïŒã·ãŒãïŒã䜿çšããŠãåçŸå¯èœãªçµæãââæäŸããŸãããããã¯çŸä»£ã®ãã¡ã¶ãŒã«ã¯æ¬ ããŠããŸãã ãã¹ããããããã°ã©ã ã§äžé£ã®ã¹ã¯ãªãããå®è¡ãããåºæ¬çãªãã³ãã®ååšã確èªãããŸãã ãã³ã°ã¯æåã§æ€åºãããŸãã ã¢ããã¿ãŒã¯ã察話åããã°ã©ã ïŒ1990幎ã®èšäºïŒããããã¯ãŒã¯ãµãŒãã¹ïŒ1995ïŒãããã³ã°ã©ãã£ã«ã«Xã¢ããªã±ãŒã·ã§ã³ïŒ1995ïŒã«ã©ã³ãã ãªå
¥åãæäŸããŸãã
1990幎ã®èšäºã§ã¯ã4ã€ã®ããã»ããµã¢ãŒããã¯ãã£ïŒi386ãCVAXãSparcã68020ïŒãš5ã€ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒ4.3 BSDãSunOSãAIXãXenixãDynixïŒããã¹ãããŸããã 1995幎ã®èšäºã§ããã©ãããã©ãŒã ã®åæ§ã®éžæã æåã®èšäºã§ã¯ããã©ãããã©ãŒã ã«å¿ããŠããŠãŒãã£ãªãã£ã®25ã33ïŒ
ã倱æããŸãã åŸç¶ã®èšäºã§ã¯ããããã®æ°å€ã®ç¯å²ã¯9ïŒ
ãã33ïŒ
ã§ãããGNUïŒSunOSäžïŒããã³Linuxãã¯ã©ãã·ã¥ã®å²åãæãäœãããŠããŸãã
1990幎ã®èšäºã§ã¯ã1ïŒããã°ã©ãã¯é
åã®å¢çããšã©ãŒã³ãŒãããã§ãã¯ããªãã2ïŒãã¯ãã¯ã³ãŒãã®èªã¿åããšãããã°ãå°é£ã«ãã3ïŒCèšèªã¯éåžžã«å®å
šã§ã¯ãªããšçµè«ä»ããŸããã éåžžã«å®å
šã§
gets
ãªã
gets
é¢æ°ãšCåã·ã¹ãã ãç¹ã«èšåãããŠããããã¹ãäžã«ãèè
ã¯å€§éå©çšãããäœå¹Žãåã«Format Stringã®è匱æ§ãçºèŠããŸããã ãã®èšäºã®æåŸã«ããŠãŒã¶ãŒããã°ãä¿®æ£ãŸãã¯å ±åããé »åºŠã«ã€ããŠã®èª¿æ»ãè¡ããŸãã ãã°ã®å ±åã¯é£ããããã°ãä¿®æ£ããããšã«ã»ãšãã©é¢å¿ããªãã£ãããšãå€æããŸããã
1995幎ã®èšäºã§ã¯ããªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ã«ã€ããŠèšåãããšã©ãŒãå°ãªãçç±ã«ã€ããŠèª¬æããŠããŸãã åŒçšïŒ
é害ã®åå ã調æ»ãããšãäžå®ãªçŸè±¡ãçŸããŸããã1990幎ã«å ±åããããã°ã®å€ãïŒçŽ40ïŒ
ïŒã¯ã1995幎ã«ãã®ãŸãŸã®åœ¢ã§æ®ã£ãŠããŸãã ...
ããã§äœ¿çšããæ¹æ³ã¯ã·ã³ãã«ã§ãã»ãšãã©ãèªååãããŠããŸãã éçºè
ãä¿¡é Œæ§ãé«ããããã«ãã®ç°¡åã§ç¡æã®ãœãŒã¹ã䜿çšããªãçç±ãç解ããã®ã¯å°é£ã§ãã
15ã20幎åŸã«ãªã£ãŠåããŠããã¡ãžã³ã°æè¡ã¯å€§èŠæš¡ãã³ããŒã®æšæºçãªãã©ã¯ãã£ã¹ã«ãªããŸãã
ãŸãããã®1990幎ã®å£°æã¯å°æ¥ã®åºæ¥äºãäºèŠããŠããããã«æããŸãã
å€ãã®å Žåãããã°ã©ãã³ã°Cã®ç°¡æœãªã¹ã¿ã€ã«ã¯æ¥µç«¯ãªãã®ã§ããã圢åŒã¯æ£ããé¢æ°ãããåªå
ãããŸãã å
¥åãããã¡ã®ãªãŒããŒãããŒã®å¯èœæ§ã¯ã æè¿ã®ã€ã³ã¿ãŒãããã¯ãŒã ã瀺ããããã«ãæœåšçãªã»ãã¥ãªãã£ããŒã«ã§ã ã
è©Šéšæ¹æ³
30幎åŸã®å¹žããªããšã«ãããŒãã³å士ã¯
ã圌ã®çºèŠãåçŸããããã®å®å
šãªãœãŒã¹ã³ãŒããã¹ã¯ãªãããããã³ããŒã¿ãæäŸ
ããŠããŸããããã¯ãä»ã®ç 究è
ãåŸãã¹ãç«æŽŸãªäŸã§ãã ã¹ã¯ãªããã¯åé¡ãªãæ©èœãããã¡ãžã³ã°ããŒã«ã¯ã³ã³ãã€ã«ãšå®è¡ã«ããããªå€æŽã®ã¿ãå¿
èŠãšããŸããã
ãããã®ãã¹ãã§ã¯ã
ãã¹ããããã¢ããªã±ãŒã·ã§ã³ã®ææ°ãªã¹ãããããã
ãã¹ã¯ãªãããšfuzz-1995-basicãªããžããªããã®å
¥åã䜿çšã
ãŸãã ã
READMEã«ãããšãå
ã®èª¿æ»ãšåãã©ã³ãã å
¥åããããŸãã 以äžã®ææ°ã®Linuxã®çµæã¯ãå
ã®èšäº
ãšãŸã£ããåããã¡ãžã³ã°ã³ãŒããšå
¥åããŒã¿ã§ååŸãããŠããŸãã ãã¹ãçšã®ãŠãŒãã£ãªãã£ã®ãªã¹ãã®ã¿ãå€æŽãããŠããŸãã
30幎ã«ããããŠãŒãã£ãªãã£ã®å€æŽ
æããã«ãéå»30幎éã«LinuxãœãããŠã§ã¢ããã±ãŒãžã«ããã€ãã®å€æŽããããŸããããããªãã®æ°ã®å®çžŸã®ãããŠãŒãã£ãªãã£ãæ°å幎ã«ããã£ãŠãã®è¡çµ±ãç¶ããŠããŸããã å¯èœãªå Žåã¯ã1995幎ã®èšäºããåãããã°ã©ã ã®ææ°ããŒãžã§ã³ãåããŸããã äžéšã®ããã°ã©ã ã¯äœ¿çšã§ããªããªã£ãããã眮ãæããŸããã ãã¹ãŠã®ä»£æ¿åã®æ£åœåïŒ
cc1
ïŒ1995幎ã®èšäºã®Cããªããã»ããµã«çžåœãgdb
ïŒ1995ãããã¬ãŒã«çžåœãditroff
ïŒ ditroff
䜿çšã§ããªããªããŸãããdtbl
ïŒå€ãdtbl
ãŠãŒãã£ãªãã£ã®GNU Troffãšåçã§ããclisp
ïŒ lisp
ã®æšæºå®è£
ãmore
âšlessïŒå°ãªãã»ã©å€ãïŒprolog
swipl
ïŒããããŒã°ã«ã¯ãSWIããããŒã°ãšGNUããããŒã°ã®2ã€ã®ãªãã·ã§ã³ããããŸãã SWI Prologã¯ãããå€ããããå®å
šãªå®è£
ã§ãããããæãŸããã§ããgawk
ïŒ awk
GNUããŒãžã§ã³ãgcc
ïŒæšæºã®Cã³ã³ãã€ã©ãcompress
ïŒGZipã¯ãå€ãUnix compress
ãŠãŒãã£ãªãã£ã®æŠå¿µäžã®åå«ã§ããsplint
ïŒGPLã®äžã§lint
ãŸããã/bin/mail
mailâš /usr/bin/mail
ïŒå¥ã®æ¹æ³ã§ã®åçã®ãŠãŒãã£ãªãã£ãfort77
ïŒFortan77ã³ã³ãã€ã©ã«ã¯ãGNU FortranãšFort77ã®2ã€ã®ããªãšãŒã·ã§ã³ããããŸãã 1ã€ç®ã¯Fortran 90ã«æšå¥šããã2ã€ç®ã¯Fortran77ãµããŒãã«æšå¥šãããŸãã f2c
ããã°ã©ã f2c
ç©æ¥µçã«ãµããŒããããŠããããã®å€æŽãªã¹ãã¯1989幎以æ¥ç¶æãããŠããŸãã
çµæ
1989幎ã®ãã¡ãžã³ã°ææ³ã§ã¯ã2018幎ã«ããšã©ãŒãèŠã€ãããŸãã ããããããã€ãã®é²æ©ããããŸãã
é²æã枬å®ããã«ã¯ãäœããã®åºç€ãå¿
èŠã§ãã 幞ããªããšã«ããã®ãããªãã¬ãŒã ã¯ãŒã¯ã¯LinuxãŠãŒãã£ãªãã£çšã«ååšããŸãã Linuxã¯1990幎ã®å
ã®èšäºã®æç¹ã§ã¯ååšããŠããŸããã§ãããã1995幎ã®2åç®ã®ãã¹ãã§ã¯ã1995 Slackware 2.1.0ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®ãŠãŒãã£ãªãã£ã§åããã¡ãžã³ã°ã³ãŒããèµ·åããŸããã é¢é£ããçµæã¯
ã1995幎ã®èšäºïŒpã7-9ïŒã®è¡š3ã«èšèŒãããŠã
ãŸã ã 競åä»ç€Ÿãšæ¯èŒããŠãGNU / Linuxã¯éåžžã«èŠæ ãããããªããŸãã
ç¡æã®LinuxããŒãžã§ã³ã®UNIXã§ã®ãŠãŒãã£ãªãã£ãšã©ãŒã®å²åã¯2çªç®ã«é«ãã9ïŒ
ã§ããã
ããã§ã¯ã1995幎ãš2018幎ã®LinuxãŠãŒãã£ãªãã£ã1989幎ã®ãã¡ãžã³ã°ããŒã«ãšæ¯èŒããŸãããã
| Ubuntu 18.10ïŒ2018ïŒ | Ubuntu 18.04ïŒ2018ïŒ | Ubuntu 16.04ïŒ2016ïŒ | Ubuntu 14.04ïŒ2014ïŒ | Slackware 2.1.0ïŒ1995ïŒ |
---|
ã¯ã©ãã·ã¥ | 1ïŒf77ïŒ | 1ïŒf77ïŒ | 2ïŒf77ãulïŒ | 2ïŒswiplãf77ïŒ | 4ïŒulãflexãindentãgdbïŒ |
ããªãŒãº | 1ïŒã¹ãã«ïŒ | 1ïŒã¹ãã«ïŒ | 1ïŒã¹ãã«ïŒ | 2ïŒã¹ãã«ããŠãããïŒ | 1ïŒctagsïŒ |
åèšãã¹ãæžã¿ | 81 | 81 | 81 | 81 | 55 |
倱æ/ããªãŒãºãïŒ
| 2ïŒ
| 2ïŒ
| 4ïŒ
| 5ïŒ
| 9ïŒ
|
é©ãã¹ãããšã«ãLinuxã®ã¯ã©ãã·ã¥ãšããªãŒãºã®æ°ã¯ãUbuntuã®ææ°ããŒãžã§ã³ã§ãã£ãŠããŒãããã倧ãããŸãŸã§ãã ãã®ããã
f77
ã¯ã»ã°ã¡ã³ããŒã·ã§ã³ãšã©ãŒã§
f2c
ããã°ã©ã ãåŒã³åºãã
spell
ããã°ã©ã ã¯ãã¹ãå
¥åã®2ã€ã®ããŒãžã§ã³ã§ãã³ã°ããŸãã
ã©ããªãã°ïŒ
ããã€ãã®ãã°ã®æ ¹æ¬åå ãæåã§ææ¡ããããšãã§ããŸããã glibcã®ãšã©ãŒãªã©ã®äžéšã®çµæã¯äºæ³å€ã§ããããåºå®ãããã¡ãŒã䜿çšããsprintfãªã©ã®ä»ã®çµæã¯äºæž¬å¯èœã§ããã
Ulã®é害
ulã®ãã°ã¯ãå®éã«ã¯glibcã®ãã°ã§ãã ç¹ã«ã2016幎ã«
ãããš
ãã ïŒ
ul
èŠã€ãã£ãå¥ã®äººïŒã§å ±åã
ããŸããã ãã°ãã©ãã«ãŒã«ãããšããšã©ãŒã¯ãŸã ä¿®æ£ãããŠããŸããã ãã®ãã°ã¯Ubuntu 18.04以éã§ã¯åçŸã§ããªãããããã£ã¹ããªãã¥ãŒã·ã§ã³ã¬ãã«ã§ä¿®æ£ãããŠããŸãã ãã°ãã©ãã«ãŒã®ã³ã¡ã³ãããå€æãããšãäž»ãªåé¡ã¯éåžžã«æ·±å»ãªå ŽåããããŸãã
ã¯ã©ãã·ã¥f77
f77
ããã°ã©ã ã¯ãFort77ããã±ãŒãžã«å«ãŸããŠããŸããããã¯ãFortran77ããCãžã®ãœãŒã¹ãã©ã³ã¹ã¬ãŒã¿ãŒã§ãã
f2c
ã·ã§ã«ã¹ã¯ãªããã§ããf2cããããã°ãããšã
errstr
é¢æ°ãé·ããããšã©ãŒã¡ãã»ãŒãžãåºåãããšãšã©ãŒãçºçããŸãã
f2cãœãŒã¹ã³ãŒãã¯ãsprintfé¢æ°ã䜿çšããŠå¯å€é·æååãåºå®ãµã€ãºãããã¡ã«æžã蟌ãããšã瀺ããŠããŸãã
errstr(const char *s, const char *t) #endif { char buff[100]; sprintf(buff, s, t); err(buff); }
ãã®ã³ãŒãã¯
f2c
ã®äœæ以éä¿æãããŠããããã§ãã ãã®ããã°ã©ã ã¯ãå°ãªããšã1989幎以éã®
å€æŽå±¥æŽãä¿æããŠããŸãã 1995幎ã«ãåãã¡ãžã³ã°ãè¡ã£ããšããFortran77ã³ã³ãã€ã©ãŒã¯ãã¹ããããŠããŸããã§ãããããã§ãªããã°ãåé¡ã¯ä»¥åã«çºèŠãããŠããã¯ãã§ãã
ããªãŒãºã¹ãã«
å€å
žçãªãããããã¯ã®çŽ æŽãããäŸã
spell
ispell
ããã€ããä»ã
ispell
å§ä»»ããŸãã
spell
ã¯ãè¡
ispell
ããã¹ã
spell
èªã¿åãã
ispell
ã®è¡ã®ãµã€ãºã®ããããã³ã°ã¬ã³ãŒããçæããŸãã ãã ãã
ispell
ã¯
BUFSIZ/2
æ倧
BUFSIZ/2
ãã€ãïŒã·ã¹ãã ã§ã¯4096ãã€ãïŒãèªã¿åããããããã³ã°ã¬ã³ãŒããçºè¡ããŠãã¯ã©ã€ã¢ã³ãããããŸã§ã«åŠçãããæ€èšŒããŒã¿ãåä¿¡ããããšã確èªããŸãã 2ã€ã®ç°ãªããã¹ãå
¥åã«ããã
spell
ã¯
ispell
ã«4096æåãè¶
ããæååãæžã蟌ãããšã匷å¶ããããããããã¯ãçºçããŸããïŒ
spell
ã¯
ispell
æååå
šäœ
ispell
èªã¿åãã®ãåŸ
ã¡ã
ispell
ã¯
spell
ãå
ã®ã¹ãã«ä¿®æ£ãèªã¿åã£ãããš
spell
確èªããã®ãåŸ
ã¡ãŸãã
åçµãŠããã
äžèŠãç¡éã«ãŒãç¶æ
ãããããã§ãã ãã³ã°ã¯ã
units
ã§ã¯ãªã
libreadline
ããã§ãããã ãã
units
æ°ããããŒãžã§ã³ã§ã¯ãã®ãšã©ãŒã¯çºçããŸããã å€æŽãã°ã¯ããã®åé¡ã誀ã£ãŠä¿®æ£ããå¯èœæ§ã®ããå
¥åãã£ã«ã¿ãªã³ã°ãè¿œå ãããããšã瀺ããŠããŸãã ãã ããçç±ã®åŸ¹åºçãªèª¿æ»ã¯ããã®ããã°ã®ç¯å²å€ã§ãã ããããã
libreadline
ãæãã
libreadline
ãŸã ããã«ãããŸãã
Swiplã¯ã©ãã·ã¥
å®å
šã
swipl
ããã«ã
swipl
倱æã«ã€ããŠèšåããããšæããŸããããã°ã¯é·ãéä¿®æ£ãããŠãããããªãé«å質ã§ãããšæãããããã培åºçã«èª¿æ»ããŸããã§ããã 倱æã¯ãå®éã«ã¯ãæåãå€æããããšãã«åŒã³åºãããã¹ããŒãã¡ã³ãïŒã€ãŸãã決ããŠçºçããŠã¯ãªããªãããšïŒã§ãã
[Thread 1] pl-fli.c:2495: codeToAtom: Assertion failed: chrcode >= 0
C-stack trace labeled "crash":
[0] __assert_fail+0x41
[1] PL_put_term+0x18e
[2] PL_unify_text+0x1c4
âŠ
ã¯ã©ãã·ã¥ã¯åžžã«æªããã®ã§ãããå°ãªããšãããã§ã¯ãããã°ã©ã ã¯ãšã©ãŒãå ±åã§ããæ©æã«å€§å£°ã§ã¯ã©ãã·ã¥ããŸãã
ãããã«
éå»30幎éããã¡ãžã³ã°ã¯ãã°ãèŠã€ããããã®ã·ã³ãã«ã§ä¿¡é Œã§ããæ¹æ³ã§ããã
ãã®åéã§
ã¯æŽ»çºãªç 究ãé²è¡äžã§ããã30幎åã®ãã¡ã¶ãŒã§ãããææ°ã®LinuxãŠãŒãã£ãªãã£ã®ãšã©ãŒãèŠã€ããããšã«æåããŠããŸãã
å
ã®èšäºã®èè
ã¯ãCãä»åŸæ°å幎ã§åŒãèµ·ããã»ãã¥ãªãã£åé¡ãäºæž¬ããŸããã 圌ã¯ãå®å
šã§ãªãã³ãŒãã¯Cã§æžãã®ã¯ç°¡åãããŠãå¯èœã§ããã°é¿ããã¹ãã ãšèª¬åŸåããã£ãŠäž»åŒµããŸãã ç¹ã«ããã®èšäºã¯ãæãåçŽãªæ®µéã§ãããã°ãçŸããããšã瀺ããŠããããã®ãããªãã¹ãã¯æšæºçãªãœãããŠã§ã¢éçºã®ãã©ã¯ãã£ã¹ã«å«ãŸããã¹ãã§ãã æ®å¿µãªããããã®ã¢ããã€ã¹ã¯äœå幎ãå®ââãããŠããŸããã
ãã®30幎éã®å顧å±ãã楜ãã¿ãã ããã 次ã®2000幎ã®
Fuzzingã®èšäºãåŸ
ã¡ãŸããã ãããã§ã¯
ãfuzzerã§ãã¹ããããšããWindows 10ã¢ããªã±ãŒã·ã§ã³ãš
Windows NT / 2000ã®åçã®ã¢ããªã±ãŒã·ã§ã³ãšã®å
ç¢æ§ãæ¯èŒ
ããŸã ã çãã¯äºæž¬ã§ãããšæããŸãã