NSMÊÇ¡°ÔÚ¶Ô¸÷ÖÖÈëÇÖ½øÐмì²âºÍÏìÓ¦¹ý³ÌÖУ¬ËùÉæ¼°µ½µÄ±êʶºÍ¾¯¸æ»·½ÚµÄÊÕ¼¯¡¢·ÖÎöºÍÎÊÌâÉý¼¶¡±¡£NSMµÄºËÐŦÄܰüÀ¨ÈëÇÖ¼ì²âϵͳ(IDS)£¬»ùÓÚÍøÂçµÄIDS(NIDS)£¬Ö÷»úÈëÇÖ¼ì²âϵͳ(HIDS)ºÍÎïÀíÈëÇÖ¼ì²âϵͳ(ÎïÀíIDS)¡£·ÖÎöÈËÔ±ÔÚ²¿Êð֮ǰӦµ±ÆÀ¹ÀÖîÈçIDSºÍHIDSµÄÈí¼þ°ü¡£

ÎÒÃÇ¿ÉÒÔÓÃÐí¶à²»Í¬µÄ·½·¨À´ÆÀ¹À¸ø¶¨Èí¼þ°üµÄ°²È«Ë®Æ½£¬¶øÆäÖеÄÒ»ÖÖÊÇʹÓÃAberlarde°²È«ÏµÍ³¹¤³Ì·¨¡£ÕâÖÖ·½·¨ÔÚÈí¼þ¿ª·¢ÉúÃüÖÜÆÚ(SDLC)µÄ¸÷¸ö½×¶ÎÏêϸÆÀ¹ÀÁËÉÌÒµºÍ¿ªÔ´Èí¼þ°üµÄ°²È«ÌØÐÔ¡£¼ì²é¿ªÔ´Èí¼þµÄÓÅÊÆÔÚÓÚ¿ÉÒÔÖ±½Ó·ÃÎÊËüÃǵĴúÂ롣ͨ¹ýÕâÖÖÖ±½Ó·ÃÎʵķ½Ê½£¬¿ª·¢ÈËÔ±¿ÉÒÔʹÓÃÖîÈç´úÂë¼ì²éºÍ¾²Ì¬´úÂë·ÖÎöµÄ¸÷ÖÖ¼¼Êõ¡£
¾²Ì¬´úÂë·ÖÎö(SCA)ÊÇÔÚ²»Ö´ÐÐÈí¼þ±¾ÉíµÄÇé¿öÏÂÕÒ³ö´úÂëÎÊÌâµÄÒ»ÖÖ·½Ê½¡£ÎªÊµÏÖÕâһĿµÄ£¬SCAµÄÏà¹Ø¹¤¾ßͨ¹ýʹÓø÷ÖÖ¿ÉÄܵÄÊäÈëÊý¾Ý£¬À´Ä£Äâ´úÂëÖ´ÐеIJ»Í¬·ÖÖ§¿ÉÄÜÐÔ¡£SCA¹¤¾ßÄܼæ¹Ë·¢ÏÖÖÊÁ¿·½Ãæ
(ÈçCOPY_PASTE_ERROR£¬FORWARD_NULL£¬INCOMPATIBLE_CAST)ºÍ°²È«·½Ãæ(ÈçUNINIT£¬BUFFER_SIZEºÍUSE_AFTER_FREE)µÄÎÊÌâ¡£SCA¹¤¾ßͬʱҲÄÜÌá¹©Ò»Ð©ÌØ¶¨µÄÐÞ¸´£¬ÒԱ㿪·¢ÕßÓ¦Óõ½Ô´´úÂëÉÏ£¬À´¼õÉÙÈí¼þµÄȱÏÝÃܶȡ£ËüÊÇͨ¹ý×é¼þµÄ´óС(ͨ³£ÊÇ´úÂëµÄÖ¸¶¨ÐÐÊý)³ýÒÔȱÏݵÄÊýÁ¿£¬À´¼ÆËã³öȱÏݵÄÃܶȡ£ÔÚ2014Ä꣬¿ªÔ´Èí¼þµÄƽ¾ùȱÏÝÃܶÈΪ0.61ÿһǧÐдúÂë»ò³ÆKLOC¡£Ïà±È֮ϣ¬ÉÌÒµÈí¼þµÄȱÏÝÃܶÈÔòΪ0.76ÿKLOC¡£
ÎÒÃÇÓÐÐí¶àÔ´×ÔOWASPµÄ¾²Ì¬·ÖÎö¹¤¾ß¿É¹©Ñ¡Ôñ¡£×Ô´ÓCoverityɨÃè·þÎñÃæÊÀÒÔÀ´£¬¸Ã¹«Ë¾ÔÚ¹ýÈ¥µÄÊ®ÄêÀﱸÊÜÖõÄ¿¡£¿ªÔ´¿ª·¢ÕßÃÇÃâ·Ñ½«ËûÃǵĴúÂëÌá½»µ½Coverity»ùÓÚÔÆ·þÎñµÄɨÃè·þÎñÉÏ£¬ÒÔ½øÐзÖÎöºÍ¼ì²é¡£Coverity»¹¿ÉÔÚ¿Í»§µÄ±¾µØ»·¾³Öв¿ÊðÒ»¸öÉÌÒµ²úÆ·£¬ÒÔÌṩ¸÷ÖÖÏàͬµÄ·ÖÎö¹¤¾ß¡£±¾ÎĽ«½éÉÜCoverityµÄ¾²Ì¬´úÂë·ÖÎöÊÇÈçºÎÔÚ²»Í¬²¿Ê𳡾°ÖУ¬±»ÓÃÀ´É¨ÃèÄÇЩ×é³É°²È«Ñó´Ð(Security
Onion)·¢ÐаæµÄÈí¼þ°ü¡£
°²È«Ñó´Ð
°²È«Ñó´ÐÊÇÓÉDoug Burksά»¤µÄÒ»¸öLinux·¢Ðа棬ÆäÖаüÀ¨ÍêÕûµÄÊý¾Ý°ü²¶»ñ¡¢NIDS¡¢HIDSºÍÒ»ÕûÌ×·ÖÎö¹¤¾ß¡£ÕâЩ¹¤¾ß°üÀ¨£º
1.netsniff-ng£ºÓÃÓÚÈ«Á¿Êý¾Ý°üµÄ²¶»ñ
2.Snort¡¢SuricataºÍBro for NIDS
3.OSSEC for HIDS
4.Sguil¡¢Squert¡¢Snorby¡¢and ELSA£ºÓÃÓÚÊý¾Ý·ÖÎö
Óëµ¥¶ÀÅäÖÃÿ¸ö¹¤¾ßÏà±È£¬Ê¹Óð²È«Ñó´Ð·¢Ðаæ¿ÉÒÔ½Úʡʱ¼ä¡£ÔÚ×ÅÊÖʹÓø÷¢ÐÐ°æ½øÐпª·¢Ö®Ç°£¬Çë×ñÑBurks
2016À´°²×°¡¢ÅäÖú͸üа²È«Ñó´Ð¡£Ò»µ©Íê³ÉÖ®ºó£¬¿ª·¢ÈËÔ±¾Í¿ÉÒÔ¼ì²é°²È«Ñó´ÐÈí¼þ°üµÄÔ´´úÂ룬ÒÔ·¢ÏÖ¸÷ÖÖ°²È«Â©¶´¡£
CoverityɨÃè
CoverityµÄÊ׸ö²¿ÊðÑ¡ÏîÊÇCoverityɨÃè¡£CoverityɨÃèÊÇÒ»ÖÖÔÆ·þÎñ£¬Ò²ÊÇÒ»¸öÃâ·ÑµÄ¿ªÔ´ÉçÇø£¬ÒÑ×¢²áµÄ¿ªÔ´¿ª·¢Õß¿ÉÒÔÉÏ´«ËûÃǵÄÔ´´úÂëÓÃ×÷·ÖÎö¡£CoverityµÄ¾²Ì¬·ÖÎöÒýÇæËæ¼´Ö´ÐжÔÔ´´úÂëµÄ·ÖÎö¡£Ö®ºó£¬¿ª·¢ÃǾͿɲ鿴½á¹û±¨¸æÖеĸ÷ÖÖÎÊÌ⣬²¢×ñѸø³öµÄ½¨ÒéÀ´½â¾öÎÊÌ⣬ȻºóÔÙÖØÐÂÌá½»Ô´´úÂë¡£
CoverityɨÃèµÄʵÀý£ºWireshark
ÔÚʹÓÃCoverityɨÃèʱ£¬¿ª·¢ÈËÔ±Ò»°ã×ñÑËĸö²½Ö裺¹¹½¨¡¢·ÖÎö¡¢ÌύȱÏݺÍÉó²é½á¹û¡£ÔÚ¹¹½¨½×¶Î£¬ÔʼµÄ¹¹½¨ÃüÁî±»×÷Ϊ²ÎÊý´«µÝ¸øCoverityµÄÃüÁîÐУºcov-build¹¤¾ß¡£cov-buildµÄÖ¸ÁîÔËÓôøÓСªdirµÄ±ê¼Ç£¬ÔÚÖмäĿ¼Ï½øÐÐÔʼ¹¹½¨ºÍ´æ´¢ÐÅÏ¢¡£ÈÃÎÒÃÇÒÔWiresharkΪÀý£¬À´¿´¿´CoverityµÄÈçϱàÒëÃüÁ
$
cov-build --encoding UTF-8 \
--dir ~/cov-inter-wireshark make |
ÔÚ·ÖÎö½×¶Î£¬ÖмäĿ¼±»ÊÖ¶¯¡¢»òÒ»¸öÁ¬Ðø¼¯³Éϵͳ(Èç Travis-CI)ÉÏ´«µ½CoverityµÄɨÃè´¦¡£´úÂë·ÖÎöÊÇÔÚCoverity·þÎñÆ÷ÉϽøÐе쬶ø²¢·Ç¿ª·¢ÈËÔ±µÄ±¾µØÏµÍ³Ö®ÉÏ¡£Coverity½«×Ô¶¯´¦ÀíÌύȱÏݵĽ׶Ρ£Í¨¹ýµÇ¼µ½CoverityÁ¬½ÓµÄÍøÂç½Ó¿Ú£¬¸÷¸öȱÏݽ«ÔÚÔ´´úÂëµÄÐÐÄÚÏÔʾ³öÉó²éµÄ½á¹û¡£
WiresharkÏîĿӵÓÐ×ÅCoverityɨÃèµÄÒ»Åú»îÔ¾Óû§¡£×Ô2006ÄêÒÔÀ´£¬ËûÃÇÐÞ¸´ÁËÊýÒÔǧ¼ÆµÄȱÏÝ¡£Èçͼ1Ëùʾ£¬Èí¼þµÄȱÏÝÃܶȷdz£µÍ£¬Ö»ÓÐ0.26ÿKLOC¡£

ͼ1£ºCoverityɨÃ裺Wireshark
(https://scan.coverity.com/projects/wireshark)
CoverityµÄ±¾µØ·ÖÎö
Ïà¶ÔÓÚCoverityɨÃèµÄÔÆ·þÎñ¶øÑÔ£¬¿ª·¢ÕßÒ²¿ÉÒÔÑ¡Ôñ¹ºÂòCoverityµÄÉÌÓòúÆ·¡£ÉÌÒµ²úÆ·¿ÉÒÔ±¾µØÄ£Ê½ÔËÐÐÔÚËûÃǵÄÍøÂçÖ®ÖС£Ò»¸ö±ê×¼µÄCoverity²¿ÊðÒªÓõ½Á½Ì¨»úÆ÷£¬À´¹¹³É¿Í»§»ú/·þÎñÆ÷¼Ü¹¹¡£
°²È«Ñó´ÐÒ»°ã×÷Ϊ±¾µØ¿ª·¢Ö÷»ú£¬ÒÔ¿Í»§¶ËµÄ·½Ê½½«Æä½á¹û·¢Ë͵½CoverityµÄÊý¾Ý¿â·þÎñÆ÷ÉÏ¡£Ä¬ÈÏÇé¿öÏ£¬°²È«Ñó´ÐµÄÈí¼þ°üÒÔ¿ÉÖ´ÐÐÎļþµÄÐÎʽ±»°²×°¡£¿ª·¢ÈËÔ±±ØÐëÊÂÏÈÏÂÔØËü£¬È»ºó±àÒë²¢·ÖÎöÏàÓ¦µÄÔ´´úÂë¡£
¿ª·¢ÈËÔ±ÔÚ¿Í»§¶ËÖ÷»úÉÏÖ´ÐдúÂë·ÖÎö£¬¶ø²¢·ÇʹÓÃCoverityɨÃèµÄ·þÎñÆ÷¡£´æ´¢½á¹ûµÄÊý¾Ý¿âÊÇÔÚ±¾µØÍøÂçÉÏ£¬¶ø²»ÊÇÔÚCoverityɨÃèµÄ·þÎñÆ÷ÉÏ¡£Èçͼ2Ëùʾ£¬Í¨¹ýµÇ¼µ½CoverityµÄWeb·þÎñÆ÷£¬²¢Ñ¡ÔñºÏÊʵÄÏîÄ¿(Èç
Wireshark)£¬±ã¿Éä¯ÀÀµ½¸÷ÖÖ²»Í¬µÄ½á¹û¡£

ͼ2£ºCoverityµÄÏîÄ¿²Ëµ¥
Èçͼ3Ëùʾ£¬Ò»µ©Ñ¡ÖÐÁËij¸öÏîÄ¿£¬¾Í¿ÉÒÔ¼ÌÐøÑ¡ÔñCoverityµÄ²Ëµ¥(ÈýµÀÏßµÄͼ±ê)£¬²¢Ñ¡Ôñ¡°¸ßΣ°²È«·çÏÕ¡±¡£

ͼ3£º¸ßΣ°²È«·çÏÕ¹ýÂËÆ÷
ÕâÕÅͼ½«ËùÓеÄCoverityȱÏݹýÂ˵½ÁËÒ»¸ö½ö°üÀ¨°²È«ÎÊÌâµÄ½ÏСÁбíÖ®ÖС£
ÐÞ¸´°²È«Â©¶´
ÔÚÐÞ¸´´úÂë֮ǰ£¬ÈÃÎÒÃÇÀ´¿´¿´ÈçºÎ¶ÔÈí¼þʹÓá°²»É˺¦ÔÔò(do no harm rule)¡±,ÒÔ¼°ÈçºÎ½«±àÒëÆ÷µÄ¾¯¸æÄÉÈ뾲̬·ÖÎöµÄÌåϵÖС£
²»É˺¦
¡°Ñ§Ð´Õû½àµÄ´úÂë²¢²»ÈÝÒס±¡£ÔÚ¿ªÊ¼µÄʱºò£¬Ô´´úÂë¿ÉÄÜÊÇÕû½àµÄ£¬µ«Ëæ×Åʱ¼äµÄÍÆÒÆËü»á±äµÃ¡°Ô½À´Ô½ÔÓÂÒ¡±¡£¶ÔÓÚÒ»¸öÓÅÐãµÄ¿ª·¢ÈËÔ±¶øÑÔ£¬¼ÈÒª»áдԴ´úÂ룬ҲҪ»áÔĶÁ¡£Èç¹û²»ÊìϤ´úÂëµÄ¶ÁÓëд£¬ÈëÇÖ·ÖÎöÈËÔ±½«»áÃæÁÙ¼è¾ÞµÄÌôÕ½¡£
¡°ÎÒÃÇ¿ÉÒÔ½«ÃÀ¹úͯ×Ó¾üµÄÒ»¸ö¼òµ¥¹æÔòÔËÓõ½ÎÒÃǵÄרҵÁìÓò£ºÔÚÀ뿪ӪµØÊ±£¬½«Æä´òɨµÃ±ÈÄã·¢ÏÖËüʱ¸ü¸É¾»¡£Èç¹ûÎÒÃǶ¼ÄÜÔÚ´úÂëÇ©Èëʱ£¬Ê¹Æä±È±»Ç©³öʱ¸ü¼ÓÕû½à£¬ÄÇô´úÂë¾Í»á²»ÐàÁË¡£¡±¡£
¡°²»É˺¦ÔÔò¡±ÓÐÁ½¸öºÃ´¦£º¿ª·¢ÈËÔ±ÄÜÌá¸ß×Ô¼ºµÄ±à³Ì¼¼ÇÉ£¬Í¬Ê±Ô´´×÷ÕßÒ²»áÈϿɿª·¢ÕßÊǸºÔðÈεÄÅû¶(responsible
disclosure)¡£
±àÒëÆ÷µÄ¾¯¸æ
¾²Ì¬´úÂë·ÖÎöµÄÁíÒ»¸ö·½ÃæÊDZàÒëÆ÷µÄ¾¯¸æ¡£ÈËÃdz£ÖØÊÓ´úÂëÊÇ·ñÄܱàÒëͨ¹ý£¬¶øºöÊÓÁ˱àÒëÆ÷µÄ¸÷ÖÖ¾¯¸æ¡£ÎÒÃÇÒÔdaq-2.0.6³ÌÐò°üΪÀý£¬Îļþdaq_afpacket.cµÄµÚ859ÐÐÉùÃ÷ÁËÒ»¸ö±äÁ¿rc£º
µÚ866Ðаüº¬ÁË£º
rc
= send(instance->peer->fd, NULL, 0, 0)
|
¶ø±àÒëÆ÷µÄ¾¯¸æÊÇ£º
daq_afpacket.c:859:25:
warning: variable ¡®rc¡¯ set but not used
[-Wunused-but-set-variable] int rc |
±àÒëÆ÷»á¸æÖª¿ª·¢ÈËÔ±£ºÀ´×Ôµ÷Óú¯Êýsend()µÄ·µ»ØÖµÉèÖÃÁ˱äÁ¿rc£¬µ«ÊÇrc²¢Ã»ÓÐÔÚºóÃæµÄº¯ÊýÖб»Ê¹Óõ½¡£Òò´ËÒ»ÖÖ½â¾ö·½°¸ÊÇ£ºÉ¾³ýµÚ859ÐУ¬²¢½«µÚ866ÐиÄΪ£º
(void)
send(instance->peer->fd, NULL, 0, 0) |
ÕâÖÖÐÞ¸ÄÆÁ±ÎÁ˱àÒëÆ÷¾¯¸æ£¬²¢¾¡¿ÉÄܵØÌù½üÔʼ´úÂ롣ͨ¹ý½«send()µÄ·µ»ØÖµµ÷Ó÷ÖÅ䏸(void)£¬Ä¿Ç°µÄ´úÂë¾Í»áºöÂÔËüÁË¡£ÁíÒ»ÖÖ¿ÉÄÜÐԵĽâ¾ö°ì·¨ÊÇ£ºÔÚµÚ866Ðкó£¬Ìí¼Ó¶îÍâµÄ´úÂ룬ÒÔ¼ì²ércËùÓеķµ»ØÖµ¡£ÕâÑùÐÞ¸ÄÁ˳ÌÐòµÄÖ´ÐУ¬Òò´ËÐèÒªÓÉά»¤ÈËÔ±½øÐÐÉó²é¡£
±àÒëÆ÷Ò²¾ßÓС°ÊÓ¾¯¸æÎª´íÎó¡±µÄÄÜÁ¦¡£Èç¹û¿ªÆôÁ˴˹¦ÄÜ£¬Ôò»áÓÐÒæÓÚÔڷֽ׶εÄÏîÄ¿ÖÐÒýÈë±àÂëµÄ¹æÔò¡£¿ª·¢ÈËÔ±Äܹ»Ò»´ÎÖ»¿ªÆôÒ»¸ö¾¯¸æ£¬Öð¸öÐÞ¸´£¬Ö®ºóÔÚʱ¼äÔÊÐíµÄÇé¿öÏ£¬ÔÙ´ò¿ª¶îÍâµÄ¾¯¸æ¡£±ÈÈ磺ÔÚAdobe
PhotoshopÖУ¬±àÒëÆ÷¾Í¾ßÓпªÆô¡°ÊÓ¾¯¸æÎª´íÎó¡±µÄÑ¡ÏÒÔʹ¿ª·¢ÍŶÓÌá¸ßÕûÌå·¢ÏÖÄÜÁ¦¡£Èç¹ûÔÚ¹¹½¨ÏµÍ³Ê±Á¬Ðø³öÏÖеıàÒëÆ÷¾¯¸æ£¬²¢Óй¹½¨µÄʧ°Ü£¬ÄÇôÍŶӾÍÄÜѸËÙ·¢ÏÖÕâЩ´íÎ󡣿ªÆô¡°ÊÓ¾¯¸æÎª´íÎó¡±µÄÁíÒ»¸öÔÒòÊÇ£º¾¡Á¿¼õÉÙ¸÷ÖÖ¾²Ì¬·ÖÎöµÄȱÏÝ£¬´Ó¶øÔÚÌí¼ÓÆäËû¹¤¾ß֮ǰ£¬Í¨¹ý±àÒëÆ÷µÄ°ïÖú£¬¸üºÃµØÔÚ´úÂë²ãÃæÉÏÏû³ýÄÇЩȱÏÝ¡£
CoverityµÄ¸÷ÖÖ°²È«¼ì²é
CoverityµÄ7.7°æ±¾ÓÐ×ÅÆßÊ®¶àÖÖÊÊÓÃÓÚCºÍC++µÄ¼ì²é£¬ÆäÖÐÓÐÊ®°ËÏîÊÇ×¢ÖØ°²È«ÎÊÌâµÄ¡£±¾½Ú½«Öصã½éÉÜUNINIT£¬BUFFER_SIZEºÍUSE_AFTER_FREE¡£
1. UNINIT
ÔÚANSI CÓïÑÔÖУ¬¡°±äÁ¿µÄ³õʼÄÚÈÝÊDz»È·¶¨µÄ¡±¡£ÓÉÓÚ¸ÃÓïÑÔÔÊÐí¸÷ÖÖ±äÁ¿ÔÚ¶¨Òåʱ²»±»³õʼ»¯£¬Òò´Ë¾³£ÓдóÁ¿µÄûÓÐÏÔʽ³õʼ»¯µÄ±äÁ¿ÔÚCÓïÑÔ´úÂëÖС£Ò»Ð©´úÂëÔÚ±äÁ¿ÉùÃ÷Ö®ºó±»Á¢¼´¸³Öµ£¬Òò´ËÍê³ÉÁ˳õʼ»¯¡£¶øÓÐʱ£¬±àÒëÆ÷»á×Ô¶¯½«±äÁ¿¸³ÖµÎªÁã¡£Òò´Ë¿ª·¢ÈËÔ±±ØÐë¼ÇסÕâЩ¹æÔò£¬ÕâÒ²¾Í¸øÈí¼þ±à³ÌÁôÏÂÁ˰²È«Òþ»¼¡£ËäÈ»ÒÑÓÐÕë¶ÔCÓïÑÔ¸ÃÎÊÌâµÄ½â¾ö°ì·¨£¬µ«ÏÖÈç½ñ£¬¶ÔÓÚ¿ª·¢ÕßÀ´Ëµ»¹ÊÇÐèÒª¼ÇסÕâЩ¹æÔòµÄ¡£
Ïû³ýÕâЩÎÊÌâµÄÒ»ÖÖ·½·¨ÊÇʹÓÃCoverityµÄ°²È«¼ì²é--UNINIT¡£UNINIT²éÕÒδ³õʼ»¯µÄ¶ÑÕ»±äÁ¿£¬ÒÔ¼°ÔÚ¶ÑÉϱ»¶¯Ì¬·ÖÅäµÄ¡¢¿ÉÄܻᵼÖ±ÀÀ£»ò°²È«ÎÊÌâµÄÄÚ´æ¡£ÔÚÎļþsf_bpf_filter.cµÄµÚ222ÐÐÖУ¬daq-2.0.6³ÌÐò°üÉùÃ÷ÁËÒ»¸öint32ÀàÐ͵ġ¢ÃûΪMEMµÄÊý×é¡£

ͼ4£ºmemµÄÉùÃ÷
µÚ406ÐÐÔÚδ³õʼ»¯µÄÌõ¼þÏÂʹÓÃmem¡£

ͼ5£ºmemµÄ·ÖÅä
ÈçͼÖеÄÂÌÉ«´úÂëËùʾ£¬Coverityͨ¹ýÑ»·Ö´ÐÐËùÓеĴúÂë·¾¶À´·ÂÕæÔËÐС£·ÂÕæ·¢ÏÖÁË£ºÔÚÖÁÉÙÒ»ÖÖÌõ¼þÏ£¬±äÁ¿MEMÔÚ³õʼ»¯Ö®Ç°±»·ÖÅ䏸Á˱äÁ¿A¡£Òª½â¾ö´ËÎÊÌ⣬ÐèÃ÷È·µØ½«ÈçϵÚ222ÐеÄÊý×é½øÐÐÈ«ÁãʽµÄ³õʼ»¯¡£
int32
mem[BPF_MEMWORDS] = {0} |
2. BUFFER_SIZE
Michael HowardºÍDavid LeBlancÔÚ¡¶±àд°²È«´úÂë¡·Ò»ÊéÖÐÌáµ½£º¡°Ò»¸ö»º³åÇøÒç³öȱÏÝËùÐèÒªµÄ¶ÔÓ¦°²È«²¹¶¡µÄ³É±¾£¬ÓÐʱ»á¸ß´ï$100,000¡±¡£CoverityµÄ°²È«¼ì²é--BUFFER_SIZEÄܹ»°ïÖú¿ª·¢ÈËÔ±ÕÒµ½£¬²¢ÐÞ¸´ËûÃÇC/C++´úÂëÀïËù°üº¬µÄ¸÷ÖÖ»º³åÇøÈ±ÏÝ¡£ÎÒÃÇÒÔsnort-2.9.8.0³ÌÐò°üΪÀý£¬Îļþencode.cµÄµÚ962Ðгõʼ»¯ÁËPROTO_IDµÄ¸÷ÖÖ¿ÉÄܱäÁ¿ÀàÐÍ£¬Ö±µ½PROTO_MAX¡£PROTO_MAXÊÇPROTO_IDö¾Ù¶¨ÒåµÄ×îºóÒ»¸öÔªËØ£º
typedef
enum {
PROTO_TCP
PROTO_UDP
..............
PROTO_MAX } PROTO_ID; |
Èçͼ6Ëùʾ£¬µÚ960Ðж¨ÒåÁ˹¦Äܺ¯ÊýUDP_Encode¡£

ͼ6£ºÔ½½ç¶ÁÈ¡µÄʾÀý
ÂÌÉ«µÄ´úÂëÏÔʾÁËCoverityËùÓõ½µÄÖ´Ðз¾¶¡£´ÓNextEncoderº¯Êý·µ»ØµÄÖµ±»´æ·ÅÔÚPROTO_IDµÄÏÂÒ»¸öÀàÐÍÖС£Òò´Ë´æÔÚ×ÅÈçϵÄÇé¿ö£ºÆä·µ»ØµÄÖµ¿ÉÄÜÊÇPROTO_MAX¡¢»ò22£¬ÕâÊÇö¾ÙµÄ×îºóÒ»¸öÔªËØ¡£ÒòΪÊý×éµÄË÷ÒýʼÓÚ0¶ø²»ÊÇ1£¬µÚ992ÐÐËùÖ¸¶¨µÄÏÂÒ»¸öλÖÃËäÈ»³¬Ô½ÁËÊý×éĩ⣬µ«ÊǻᱻË÷Òýµ½±àÂëÆ÷Êý×éÖ®ÖС£ÎªÁË·ÀÖ¹ÕâÖÖ»º³åÇøÒç³öµÄ¿ÉÄÜ£¬ÔÚËü±»Ë÷Òýµ½±àÂëÆ÷Êý×é֮ǰ£¬ÎÒÃÇ¿ÉÒÔÓÃif/elseÓï¾ä½«µÚ992ÐС°¾í»ØÀ´¡±£¬ÒÔ¼ì²éÆäÏÂÒ»¸öÊÇ·ñÈÔȻСÓÚPROTO_MAX¡£
3.USE_AFTER_FREE
¶¨Òå¸÷ÖÖ±äÁ¿Ê±£¬Ò»°ãΪËüÃÇÔÚÄÚ´æÖб£ÁôÒ»¸öλÖᣵ±³ÌÐòÃ÷È·µØÓ¦¸ÃÊÍ·ÅÄÚ´æÊ±£¬¿ª·¢ÈËÔ±ÐèҪȷ±£±»ÊͷŵÄÄÚ´æ²»»áÔÙÓб»Ê¹ÓõĿÉÄÜ¡£ÒÔ²»¹æ·¶µÄ·½Ê½Ê¹ÓÃÄڴ棬¿ÉÄܻᵼÖ²»¿ÉÔ¤²âµÄ½á¹û£¬ºÍ±»ÀûÓõĿÉÄÜ¡£
Ïû³ýÕâЩÎÊÌâµÄÒ»ÖÖ·½·¨ÊÇʹÓÃCoverityµÄ°²È«¼ì²é--USE_AFTER_FREE¡£ÎÒÃÇÒÔnetsniff-ng-0.6.0³ÌÐò°üΪÀý£¬ÔÚÎļþcurvetun_client.cµÄµÚ304ÐÐÖУ¬ÉùÃ÷Ò»¸öÖ¸ÕëÈ¥Ö¸ÏòÒ»¸ö³ÆÎª¡°Ç°µ¼(ahead)¡±µÄÊý¾Ý½á¹¹¡£Èçͼ7Ëùʾ¡£

ͼ7£ºnetsniff-ng ¨C ǰµ¼ÉùÃ÷
Èçͼ8Ëùʾ£¬µÚ339Ðн«Ç°µ¼Ö¸Õë·ÖÅ䏸ai¡£

ͼ8£ºÇ°µ¼Ö¸Õ븳ֵ
CoverityÔÚµÚ358Ðз¢ÏÖǰµ¼Ö¸ÕëÒѱ»ÊÍ·Å¡£µÚ367ÐеÄgotoÓï¾ä½«³ÌÐòµÄÖ´ÐÐÌø×ªµ½µÚ311ÐС£ÏÂÒ»´Îͨ¹ýÔÚµÚ339ÐеÄÑ»·£¬Ö¸ÕëÔÚδ±»ÊÂÏȼì²éΪNULLµÄÇé¿öÏ£¬±»·ÖÅ䏸ÁËai¡£Òª½â¾ö´ËÎÊÌ⣬Ӧµ±Ìí¼ÓÒÔÏ´úÂëµ½µÚ358ÐÐÖ®ºó£¬½«Ö¸ÕëÉèÖÃΪNULL¡£
¸ºÔðÈεÄÅû¶
ÐÞ¸´Á˸÷ÖÖ©¶´Ö®ºó£¬¿ª·¢ÈËÔ±ÓÐÔðÈÎÏòά»¤ÈËÔ±Åû¶Æä³ÌÐò´úÂë¡£¶ÔÓÚÏñʹÓõ½GitHubµÄWiresharkÖ®ÀàµÄÏîÄ¿£¬¸÷ÖÖÐÞ¸´ÏîÄ¿Îĵµ(ÈçWireshark¿ª·¢ÕßÖ¸ÄÏ,2014)£¬±»ÒÔ¡°git
push¡±µÄÃüÁîÓèÒÔÌá½»¡£ÆäËûµÄÏîĿҲ»áÓÐÓʼþÁÐ±í£¬»òȱÏݸú×ÙϵͳÓÃÓÚ¸÷ÖÖÐÞ¸´µÄÌá½»¡£
δÀ´µÄ¹¤×÷
ÔÚ2016Äê1Ô£¬Coverity·¢²¼Á˾²Ì¬·ÖÎö¹¤¾ßµÄ8.0°æ±¾£¬ÆäÖÐÒ»¸öÖ÷ÒªµÄй¦ÄÜÊǾßÓзÖÎöPython´úÂëµÄÄÜÁ¦¡£°²È«Ñó´Ð°üº¬Ò»ÖÖ±»³ÆÎªScapyµÄÊý¾Ý°ü´¦Àí¹¤¾ß¡£ScapyÕýÔÚ±»ÈÕÒæÆÕ¼°£¬ÓÈÆäÊÇÔÚ¹¹½¨ÎïÁªÍøÊ±£¬¿É±»ÓÃÀ´·ÖÎöÈëÇֺ͵÷²é¸÷ÖÖÉ豸¡£Î´À´µÄÏîÄ¿»¹»áÈ¥¼ì²éScapyµÄ¾²Ì¬´úÂë·ÖÎö½á¹û¡£
½áÂÛ
ÀûÓÿªÔ´IDS¼Ó¹Ì¼ÆËã»úÍøÂ磬ÐèÒªÈëÇÖ·ÖÎöÈËÔ±Á˽âϵͳÀï¸÷ÖÖÈí¼þ°üµÄ°²È«ÌØÐÔ¡£Í¨¹ýÕë¶ÔIDSµÄÈí¼þ¾²Ì¬´úÂë·ÖÎö£¬·ÖÎöÈËÔ±»á¶Ô¿ªÔ´Èí¼þËùÌṩµÄ°²È«ÌØÐÔ¸üΪÁ˽⡣
id Software¹«Ë¾µÄÁªºÏ´´Ê¼ÈËJohn CarmackÔøËµ£º¡°×÷Ϊһ¸ö³ÌÐòÔ±£¬½üÄêÀ´ÎÒËù×öµÄ×îÖØÒªµÄÊÂÇé¾ÍÊÇ£º»ý¼«µØÍƽøÁ˾²Ì¬´úÂë·ÖÎö¡£¡±Õâ¾ÍÊÇÕâλ×îÓÐÃûµÄÈí¼þ¿ª·¢Õ߸ø´ó¼ÒµÄÓйØÈëÇÖ·ÖÎöµÄ×î¼Ñʵ¼ù¡£ |