È»¶ø£¬Ëæ×ÅϵͳµÄÈÕÒæ¸´ÔӺʹúÂëÁ¿µÄ¾çÔö£¬LinuxÄں˵ݲȫÐÔÃæÁÙ×ÅǰËùδÓеÄÌôÕ½
ΪÁËÓ¦¶ÔÕâÒ»ÌôÕ½£¬Ä£ºý²âÊÔ£¨Fuzz Testing£©×÷ΪһÖÖ×Ô¶¯»¯µÄÈí¼þ²âÊÔ¼¼Êõ£¬Öð½¥³ÉΪÍÚ¾òÄÚºËDZÔÚ©¶´¡¢ÌáÉýϵͳÎȶ¨ÐÔµÄÖØÒªÊÖ¶Î
±¾ÎĽ«ÉîÈë̽ÌÖLinuxÄÚºËFuzzµÄʵ¼ù£¬Õ¹Ê¾ÆäÔÚÔöǿϵͳ°²È«ÐÔ·½ÃæµÄ¾Þ´óDZÁ¦
Ò»¡¢LinuxÄں˵ĽṹÓ븴ÔÓÐÔ LinuxÄÚºËÊDzÙ×÷ϵͳµÄºËÐIJ¿·Ö£¬¸ºÔð¹ÜÀíϵͳµÄ×ÊÔ´¡¢½ø³Ìµ÷¶È¡¢É豸Çý¶¯³ÌÐòµÈºËÐŦÄÜ
ÆäÖ÷Òª×é³É²¿·Ö°üÀ¨£º 1.½ø³Ì¹ÜÀí£ºµ÷¶ÈÆ÷¾ö¶¨ÔÚ¶àÈÎÎñϵͳÖÐÄĸö½ø³Ì»ñµÃCPUʱ¼ä£»½ø³Ì¿ØÖƿ飨PCB£©´æ´¢Óйؽø³ÌµÄÐÅÏ¢£¬Èç¼Ä´æÆ÷״̬¡¢½ø³Ì״̬µÈ
2.ÄÚ´æ¹ÜÀí£ºÐéÄâÄÚ´æ¹ÜÀí¸ºÔð½ø³ÌµÄÐéÄâµØÖ·¿Õ¼ä£¬°üÀ¨·ÖÒ³»úÖÆ¡¢Ò³ÃæÖû»»úÖÆµÈ£»ÎïÀí´æ´¢¹ÜÀíÔò¸ú×ÙϵͳÖеÄÎïÀíÄڴ棬°üÀ¨ÄÚ´æ·ÖÅä¡¢ÊͷŵÈ
3.Îļþϵͳ£ºÐéÄâÎļþϵͳ£¨VFS£©ÌṩÎļþϵͳµÄ³éÏó½Ó¿Ú£¬Ê¹µÃ²»Í¬ÀàÐ͵ÄÎļþϵͳ¿ÉÒÔ¹²ÏíÏàͬµÄAPI£»ÎļþÃèÊö·û±í¹ÜÀí´ò¿ªµÄÎļþÐÅÏ¢
4.É豸Çý¶¯³ÌÐò£º×Ö·ûÉ豸ºÍ¿éÉ豸Çý¶¯ÓÃÓÚ¹ÜÀí²»Í¬ÀàÐ͵ÄÓ²¼þÉ豸£¬Èç¼üÅÌ¡¢Ó²Å̵ȣ»ÍøÂçÉ豸Çý¶¯´¦ÀíÍøÂçÉ豸ºÍÐÒéÕ»
5.ÍøÂçÐÒéÕ»£ºTCP/IPÐÒéÕ»°üÀ¨ÍøÂç²ã¡¢´«Êä²ãµÈ£¬ÓÃÓÚʵÏÖÍøÂçͨÐÅ£»Ì×½Ó×Ö²ãÌṩӦÓóÌÐòÓëÍøÂçÐÒéÖ±½ÓµÄ½Ó¿Ú
6.ϵͳµ÷ÓýӿڣºÏµÍ³µ÷ÓÃÌṩÓû§¿Õ¼ä³ÌÐòÓëÄÚºËÖ±½ÓµÄ½Ó¿Ú£¬ÔÊÐíÓû§³ÌÐòÇëÇóÄÚºËÖ´ÐÐÌØÈ¨²Ù×÷
7.ÖжϺÍÒì³£´¦Àí£ºÖжϴ¦Àí³ÌÐò´¦ÀíÓ²¼þÖжϣ¬ÔÊÐíÍⲿÉ豸ÏòCPU·¢ËÍÐźţ»Òì³£´¦Àí³ÌÐò´¦Àí´íÎó»òÒì³£Çé¿ö
8.¶¨Ê±Æ÷ºÍʱÖÓ¹ÜÀí£ºÄں˶¨Ê±Æ÷ÓÃÓÚʵÏÖ¼ÆÊ±ºÍʱ¼ä¹ÜÀí£»ÊµÊ±Ê±ÖÓ£¨RTC£©´¦ÀíÓ²¼þʱÖÓ
9.ͬ²½ºÍ»¥³â»úÖÆ£ºÐźÅÁ¿¡¢×ÔÐýËø¡¢»¥³âÁ¿µÈÓÃÓÚÈ·±£¶à¸ö½ø³Ì»òÏß³ÌÖ®¼äµÄͬ²½Ó뻥³â
10. ϵͳ³õʼ»¯ºÍÆô¶¯£ºÒýµ¼¼ÓÔØ³ÌÐò£¨Bootloader£©¸ºÔð¼ÓÔØÄں˾µÏñµ½ÄÚ´æÖУ»Æô¶¯¹ý³Ì°üÀ¨³õʼ»¯Ó²¼þ¡¢ÎļþϵͳµÈ£¬×îÖÕÖ´ÐеÚÒ»¸öÓû§¿Õ¼ä½ø³Ì
LinuxÄں˵ÄÔ´´úÂëÊÇÄ£¿é»¯µÄ£¬ÔÊÐíÌí¼Ó»òɾ³ýÌØ¶¨¹¦ÄܵÄÄ£¿é£¬ÒÔÊÊÓ¦²»Í¬µÄÐèÇó
È»¶ø£¬ÕâÖÖ¸´ÔÓÐÔÒ²´øÀ´ÁËDZÔڵݲȫ·çÏÕ
¶þ¡¢Ä£ºý²âÊÔ£¨Fuzz Testing£©¸ÅÊö Ä£ºý²âÊÔÊÇÒ»ÖÖ×Ô¶¯»¯µÄÈí¼þ²âÊÔ¼¼Êõ£¬Í¨¹ýÏò³ÌÐò´«µÝÎÞЧ¡¢ÒâÍâ»òËæ»úµÄÊäÈ룬²¢¼à¿Ø³ÌÐòµÄÔËÐнá¹û£¬ÒÔ·¢ÏÖ±ÀÀ£¡¢¶ÏÑÔʧ°Ü¡¢¾ºÌ¬Ìõ¼þ¡¢ÄÚ´æÐ¹Â©µÈÎÊÌâ
ÔÚLinuxÄں˵ݲȫÐÔ²âÊÔÖУ¬Ä£ºý²âÊÔ·¢»Ó×ÅÖÁ¹ØÖØÒªµÄ×÷ÓÃ
1.²âÊÔÀàÐÍ£º -»ùÓÚÉú³ÉµÄ²âÊÔ£ºÍ¨¹ý¶ÔÄ¿±êÐÒé»òÎļþ¸ñʽ½¨Ä££¬´ÓÁ㿪ʼ²úÉú²âÊÔÓÃÀý
-»ùÓÚ±äÒìµÄ²âÊÔ£º»ùÓÚһЩ¹æÔò£¬´ÓÒÑÓеÄÊý¾ÝÑù±¾»ò´æÔÚµÄ״̬±äÒì²úÉú²âÊÔÓÃÀý
-½ø»¯Ê½²âÊÔ£º½áºÏÁËÉÏÊöÁ½ÖÖÀàÐÍ£¬Í¬Ê±¸ù¾Ý´úÂ븲¸ÇÂʵķ´À¡½øÐбäÒì
2.²âÊÔ¹¤¾ß£º -AFL£¨American Fuzzy Lop£©£ºÒ»¸öÁ÷ÐеÄÄ£ºý²âÊÔ¿ò¼Ü£¬ÒÔÆä¸ßЧºÍÒ×ÓÚʹÓõÄÌØµãÖø³Æ
-kernel-fuzzing£º×¨ÎªLinuxÄÚºËÉè¼ÆµÄÄ£ºý²âÊÔ¹¤¾ß¿â£¬»ùÓÚAFL¹¹½¨£¬Äܹ»Õë¶ÔÄں˵IJ»Í¬×Óϵͳ½øÐвâÊÔ
-PrIntFuzz£ºÒ»¸öÕë¶ÔLinuxÇý¶¯³ÌÐòµÄÄ£ºý²âÊÔ¿ò¼Ü£¬Í¨¹ý×Ô¶¯»¯ÐéÄâÉ豸ģÄâÀ´²âÊÔÇý¶¯³ÌÐò
Èý¡¢LinuxÄÚºËFuzzµÄʵ¼ù 1.kernel-fuzzingµÄʵ¼ù£º -ÏîÄ¿±³¾°£ºkernel-fuzzingÏîÄ¿ÒÔAFLΪ»ù´¡¹¹½¨£¬Í¨¹ýÖÇÄÜ»¯µÄ²ßÂÔÍÚ¾òÄÚºËÖеÄDZÔÚ©¶´
-²âÊÔÁ÷³Ì£ºÃ¿¸ö¶ÀÁ¢µÄfuzzerÕë¶ÔÄں˵IJ»Í¬×Óϵͳ£¬½«Î¢Ð¡µÄ¶þ½øÖÆ¡°²âÊÔ°¸Àý¡±×ª»¯ÎªÒ»ÏµÁÐϵͳµ÷ÓúͲÎÊý£¬´¥·¢ÄÚºËÖеĸ´ÔÓÐÐΪ·¾¶
-ÓÅÊÆ£º - Õë¶ÔÐÔÇ¿£ºÃ¿¸öfuzzerרעÓÚÄں˵ÄÒ»¸ö¾ßÌå×Óϵͳ£¬Ìá¸ßÁËÎÊÌⶨλµÄ¾«¶È
- Áé»îÐԸߣºËäÈ»ÓëAFL½ôÃܼ¯³É£¬µ«Ò²¼æÈÝÆäËû¿ò¼Ü£¬ÍØÕ¹ÐÔÇ¿
- ×Ô¶¯»¯²âÊÔÁ÷³Ì£º´ÓÆô¶¯µ½fuzzerµÄÔËÐкͻָ´£¬Õû¸ö¹ý³Ì¾ù¿É×Ô¶¯»¯£¬Êʺϴó¹æÄ£²¢ÐвâÊÔ
2.PrIntFuzzµÄʵ¼ù£º -ÏîÄ¿±³¾°£ºÕë¶ÔLinuxÇý¶¯³ÌÐò©¶´Õ¼±È×î´óµÄÎÊÌ⣬PrIntFuzzͨ¹ý×Ô¶¯»¯ÐéÄâÉ豸ģÄâÀ´²âÊÔÇý¶¯³ÌÐò
-²âÊÔÁ÷³Ì£º - ÐéÄâÉ豸½¨Ä££ºÍ¨¹ý¾²Ì¬·ÖÎöÌáÈ¡Çý¶¯³ÌÐòÐÅÏ¢£¬´´½¨ÐéÄâÉ豸
- Çý¶¯×¼±¸£ºÔÚÄÚºËÅäÖÃÖÐÆôÓÃÇý¶¯³ÌÐò£¬ÊµÏÖ´íÎó×¢Èë·½·¨
- QEMUÄ£ºý²âÊÔ£ºÔÚQEMU»·¾³Öд´½¨ÐéÄâÉ豸£¬½øÐжàά¶ÈµÄÄ£ºý²âÊÔ
-³É¹û£º³É¹¦Ä£ÄâÁ˶àÖÖÐéÄâÉ豸£¬²¢ÔÚÏàÓ¦µÄÇý¶¯³ÌÐòÖз¢ÏÖÁË´óÁ¿bug
ËÄ¡¢LinuxÄÚºËFuzzµÄÌôÕ½ÓëδÀ´ ¾¡¹ÜLinuxÄÚºËFuzzÔÚÌáÉýϵͳ°²È«ÐÔ·½ÃæÈ¡µÃÁËÏÔÖø³É¹û£¬µ«ÈÔÃæÁÙÖî¶àÌôÕ½£º 1.²âÊÔ¸²¸ÇÂÊ£º¾¡¹ÜÄ£ºý²âÊÔÄܹ»·¢ÏÖÐí¶àDZÔÚ©¶´£¬µ«ÊÜÏÞÓÚÊäÈë¿Õ¼äµÄ¾Þ´óºÍ³ÌÐò·¾¶µÄ¸´ÔÓÐÔ£¬ÈÔÓпÉÄÜÒÅ©ijЩ©¶´
2.²âÊÔЧÂÊ£ºÄ£ºý²âÊÔÐèÒª´óÁ¿µÄʱ¼äºÍ×ÊÔ´À´ÔËÐУ¬ÌرðÊÇÔÚÕë¶Ô´óÐÍϵͳÈçLinuxÄÚºËʱ
3.²âÊÔ½á¹û½âÊÍ£ºÄ£ºý²âÊÔ²úÉúµÄ±ÀÀ£»ò´íÎóÍùÍùÄÑÒÔÖ±½Ó¶¨Î»µ½¾ßÌåµÄ©¶´ÔÒò£¬ÐèÒª½øÒ»²½µÄµ÷ÊԺͷÖÎö
δÀ´£¬LinuxÄÚºËFuzzµÄ·¢Õ¹·½Ïò¿ÉÄܰüÀ¨£º - ¸üÖÇÄܵIJâÊÔ²ßÂÔ£ºÍ¨¹ý»úÆ÷ѧϰµÈ¼¼Êõ£¬ÓÅ»¯²âÊÔÓÃÀýµÄÉú³ÉºÍ±äÒì²ßÂÔ£¬Ìá¸ß²âÊÔЧÂʺ͸²¸ÇÂÊ
- ¸üÈ«ÃæµÄ²âÊÔ¿ò¼Ü£ºÕûºÏÏÖÓеÄÄ£ºý²âÊÔ¹¤¾ßºÍ·½·¨£¬¹¹½¨¸üÈ«ÃæµÄ²âÊÔ¿ò¼Ü£¬ÒÔ¸²¸Ç¸ü¶àµÄÄÚºË×ÓϵͳºÍÇý¶¯³ÌÐò
- ¸üÉîÈëµÄ©¶´·ÖÎö£º½áºÏ¾²Ì¬·ÖÎöºÍ¶¯Ì¬·ÖÎö¼¼Êõ£¬¶ÔÄ£ºý²âÊÔ²úÉúµÄ±ÀÀ£»ò´íÎó½øÐÐÉîÈë·ÖÎö£¬¶¨Î»¾ßÌåµÄ©¶´ÔÒò
Îå¡¢½áÓï LinuxÄÚºË×÷Ϊ²Ù×÷ϵͳµÄºËÐIJ¿·Ö£¬Æä°²È«ÐÔÖÁ¹ØÖØÒª
Ä£ºý²âÊÔ×÷ΪһÖÖ×Ô¶¯»¯µÄÈí¼þ²âÊÔ¼¼Êõ£¬ÔÚÍÚ¾òÄÚºËDZÔÚ©¶´¡¢ÌáÉýϵͳÎȶ¨ÐÔ·½Ãæ·¢»Ó×Ų»¿ÉÌæ´úµÄ×÷ÓÃ
ͨ¹ý²»¶Ï̽Ë÷ºÍʵ¼ùLinuxÄÚºËFuzz£¬ÎÒÃÇÄܹ»ÒÔǰËùδÓеķ½Ê½ÌôÕ½ºÍÑéÖ¤Äں˵ļ«ÏÞ£¬ÎªÊý×ÖÊÀ½çµÄ»ù´¡ÉèÊ©ÖþÆð¸ü¼Ó¼á¹ÌµÄ·ÀÏß
ÎÞÂÛÊǶÔÓÚ¸öÈË¿ª·¢Õß»¹ÊÇÆóÒµÍŶӣ¬ÉîÈëÁ˽âºÍÓ¦ÓÃLinuxÄÚºËFuzz¶¼ÊÇÌáÉýϵͳ°²È«ÐÔµÄÖØÒªÍ¾¾¶
ÈÃÎÒÃÇЯÊÖ¹²½ø£¬Îª¹¹½¨Ò»¸ö¸ü¼Ó°²È«¡¢Îȶ¨µÄLinuxÉú̬ϵͳ¶øÅ¬Á¦£¡