AndroidÀ¶ÑÀ×é¼þÎó²îÁ¬Á¬¿´
Ðû²¼Ê±¼ä 2018-08-151¡¢¸ÅÊö
AndroidϵͳÖУ¬£¬£¬£¬À¶ÑÀ×é¼þ¿ÉÒÔ˵ÊÇÇå¾²Îó²îÖØÔÖÇø£¬£¬£¬£¬2017ÄêArmisSecurityÇå¾²ÍŶÓÐû²¼BlueBorne×éºÏÎó²î¹¥»÷Á´¿ÉÒÔͨ¹ýÀ¶ÑÀ¶ÔÖÇÄÜÊÖ»ú¾ÙÐÐÔ¶³Ì¹¥»÷£¬£¬£¬£¬Î£º¦ÐÔ¼«´ó¡£¡£¡£¡£¡£¡£¡£½ñÄêÈýÔ·ݵÄAndroidÇ徲ͨ¸æÖУ¬£¬£¬£¬ÏµÍ³²ãÎó²îËùÓж¼ÊÇÀ¶ÑÀ×é¼þÎó²î£¬£¬£¬£¬×ܹ²10¸ö¡£¡£¡£¡£¡£¡£¡£Îó²î¶àÂþÑÜÔÚSDP£¨Ð§ÀÍ·¢Ã÷ÐÒ飩ºÍBNEP£¨À¶ÑÀÍøÂç·â×°ÐÒ飩ÖУ¬£¬£¬£¬²¢ÇÒÎó²îÀàÐͶàÊÇÄÚ´æÔ½½ç¶Áд¡£¡£¡£¡£¡£¡£¡£ËÄÔ·ݵÄÇ徲ͨ¸æÖУ¬£¬£¬£¬×ܹ²ÓÐ7¸öÀ¶ÑÀ×é¼þÎó²î£¬£¬£¬£¬¶àÂþÑÜÔÚAVRCP£¨ÒôƵ/ÊÓÆµÔ¶³Ì¿ØÖÆÉèÖÃÎļþ£©ÐÒéÖС£¡£¡£¡£¡£¡£¡£ÁùÔÂ·ÝºÍÆßÔ·ÝAndroid Ç徲ͨ¸æÖÐÒÀÈ»Åû¶Á˶à¸öÀ¶ÑÀ×é¼þÎó²î£¬£¬£¬£¬Éæ¼°À¶ÑÀÐÒéÕ»Öжà¸öÐÒ飬£¬£¬£¬Éæ¼°µÄÔ´Âë°æ±¾Îª6.0¡¢ 6.0.1¡¢ 7.0¡¢ 7.1.1¡¢7.1.2¡¢ 8.0¡¢ 8.1£¬£¬£¬£¬ÁýÕÖ¹æÄ£½Ï¹ã¡£¡£¡£¡£¡£¡£¡£
±¾ÎĽ«ÏÈÈÝÀ¶ÑÀÐÒéÕ»ÖеÄL2CAPÐæÅºÍSMPÐÒ飬£¬£¬£¬²¢¶ÔCVE-2018-9359ºÍCVE-2018-9365ÕâÁ½¸öÎó²î°¸Àý¾ÙÐÐÏêϸÆÊÎö¡£¡£¡£¡£¡£¡£¡£
2¡¢ÐÒé¼ò½é
2.1 L2CAP
L2CAP£¨Logical Link Control and Adaptation Protocol£©³ÆÎªÂß¼Á´Â·ºÍÊÊÅäÐÒ飬£¬£¬£¬ÊÇÀ¶ÑÀϵͳÖеĽ¹µãÐÒ飬£¬£¬£¬Î»ÓÚÊý¾ÝÁ´Â·²ã¡£¡£¡£¡£¡£¡£¡£L2CAPͨ¹ýÐÒé¶à·Ö¸´ÓᢷֶκÍÖØ×飬£¬£¬£¬Ïò¸ß²ãÌá¹©ÃæÏòÅþÁ¬ºÍÎÞÅþÁ¬µÄÊý¾ÝЧÀÍ¡£¡£¡£¡£¡£¡£¡£
2.1.1 L2CAPÊý¾Ý°üÃûÌÃ
L2CAPÊÇ»ùÓÚ·Ö×éµÄ£¬£¬£¬£¬µ«Ò²×ñÕÕÐŵÀ´«ÊäµÄͨѶģ×Ó¡£¡£¡£¡£¡£¡£¡£L2CAPÖ§³ÖµÄÐŵÀÓÐÁ½ÖÖ£ºÃæÏòÅþÁ¬µÄÐŵÀºÍÃæÏòÎÞÅþÁ¬µÄÐŵÀ¡£¡£¡£¡£¡£¡£¡£ÔÚÃæÏòÅþÁ¬µÄÐŵÀÖУ¬£¬£¬£¬L2CAPÊý¾Ý°üµÄÃûÌÃÈçÏÂͼËùʾ¡£¡£¡£¡£¡£¡£¡£
Êý¾Ý°üÖÐÿ¸ö×ֶεÄ˵Ã÷ÈçÏÂËùʾ£º
2.1.2 L2CAPÐÅÁî
Á½Ì¨À¶ÑÀ×°±¸Í¨¹ýL2CAPÐÒéͨѶʱ£¬£¬£¬£¬ËùÓеÄÐÅÁî¶¼±»·¢Ë͵½CIDΪ0x0001µÄÐŵÀÖС£¡£¡£¡£¡£¡£¡£L2CAPÐÅÁîµÄÃûÌÃÈçÏÂËùʾ¡£¡£¡£¡£¡£¡£¡£
L2CAPÐÅÁîÖÐÿ¸ö×ֶεÄ˵Ã÷ÈçÏÂËùʾ£º
L2CAPÐÒé¹²ÓÐ12ÖÖÐÅÁîÀàÐÍ£¬£¬£¬£¬¸÷ÐÅÁîµÄ×÷ÓÃÈçϱíËùʾ¡£¡£¡£¡£¡£¡£¡£
ÁíÍ⣬£¬£¬£¬¶à¸öÐÅÁî¿ÉÒÔÔÚͳһ¸öÖ¡Öз¢ËÍ£¬£¬£¬£¬ÈçÏÂͼËùʾ¡£¡£¡£¡£¡£¡£¡£
2.2 SMP
SMP£¨Security Manage Protocol£©ÊÇÀ¶ÑÀÐÒéÕ»ÖеÄÇå¾²ÖÎÀíÐÒ飬£¬£¬£¬ÈÏÕæÀ¶ÑÀ×°±¸Ö®¼äµÄÅä¶ÔºÍÃÜÔ¿·ÖÅÉ¡£¡£¡£¡£¡£¡£¡£
SMPÏÂÁîÃûÌÃÈçÏÂͼËùʾ¡£¡£¡£¡£¡£¡£¡£
ÆäÖУ¬£¬£¬£¬Code×Ö¶ÎΪһ¸ö8bit£¬£¬£¬£¬±êʶÏÂÁîµÄÀàÐÍ¡£¡£¡£¡£¡£¡£¡£SMPÏÂÁîµÄÀàÐÍÈçϱíËùʾ¡£¡£¡£¡£¡£¡£¡£Data×Ö¶ÎÔÚ³¤¶ÈÉÏÊǿɱäµÄ£¬£¬£¬£¬ Code×ֶξöÒéData×ֶεÄÃûÌᣡ£¡£¡£¡£¡£¡£
3¡¢Îó²îÔÀíÆÊÎö
3.1 CVE-2018-9359
£¨ÒÔÏÂÆÊÎö»ùÓÚandroid-8.0.0_r4°æ±¾Ô´Â룩
CVE-2018-9359Îó²îλÓÚL2CAPÐÒéÄ£¿£¿£¿£¿£¿£¿£¿é£¬£¬£¬£¬Îó²îÀàÐÍÊÇÔ½½ç¶Á¡£¡£¡£¡£¡£¡£¡£¿£¿£¿£¿£¿£¿£¿ÉÒÔͨ¹ý¹È¸è¹Ù·½Í¨¸æ¿´µ½Îó²î²¹¶¡¡£¡£¡£¡£¡£¡£¡£Îó²î²¹¶¡´úÂëλÓÚ/stack/l2cap/l2c_main.ccÎļþÖеÄprocess_l2cap_cmdº¯ÊýÖУ¬£¬£¬£¬¸Ãº¯ÊýÖ÷Òª¹¦Ð§ÊÇ´¦Öóͷ£ÎüÊÕµÄL2CAPÐÒéµÄÐÅÁî°ü¡£¡£¡£¡£¡£¡£¡£
´Ó´úÂë291ÐÐ×îÏÈ£¬£¬£¬£¬whileÑ»·ÆÊÎöL2CAPÊý¾Ý°üÖÐËùÓеÄCOMMANDÏÂÁî¡£¡£¡£¡£¡£¡£¡£Ê×ÏÈ¿´Ò»ÏÂÁ½¸öºê½ç˵£ºSTREAM_TO_UINT8´ÓpÖ¸ÏòµÄÊý¾Ý°üÖжÁÈ¡1¸ö×Ö½Ú£¬£¬£¬£¬pÖ¸Õë¼Ó1£»£»£»£»STREAM_TO_UINT16ÿ´Î´ÓpÖ¸ÏòµÄÊý¾Ý°üÖжÁÈ¡2¸ö×Ö½Ú£¬£¬£¬£¬pÖ¸Õë¼Ó2¡£¡£¡£¡£¡£¡£¡£
³ÌÐòŲÓúêÒÀ´Î´ÓpÖ¸ÏòµÄÊý¾Ý°üÖжÁÈ¡cmd_code¡¢idºÍcmd_len×Ö¶Î,´ËʱpÓ¦¸ÃÖ¸ÏòdataÊý¾ÝÓòµÄ¿ªÍ·¡£¡£¡£¡£¡£¡£¡£
µ±Code=0x1£¬£¬£¬£¬´ú±íCommand rejectÊý¾Ý°ü£¬£¬£¬£¬Êý¾Ý°ü½ç˵ÈçÏÂËùʾ¡£¡£¡£¡£¡£¡£¡£µ±Length²»Îª0£¬£¬£¬£¬dataÊý¾ÝÓòÖаüÀ¨Á½¸ö×ֶΣºReason×Ö¶Î(2×Ö½Ú)ºÍData×ֶΡ£¡£¡£¡£¡£¡£¡£
´¦Öóͷ£Command rejectÊý¾Ý°üµÄ·ÖÖ§´úÂëÈçÏ£º
´Ó´úÂë¿ÉÒÔ¿´³ö£¬£¬£¬£¬³ÌÐòûÓÐÅжϸÃÏÂÁî°üÊÇ·ñ±£´ædataÊý¾ÝÓò£¬£¬£¬£¬ÔÚ334ÐÐÖÐÖ±½ÓʹÓúê¶ÁÈ¡2¸ö×Ö½ÚµÄrej_reason¡£¡£¡£¡£¡£¡£¡£Òò´ËÔÚÄÚ´æ¶ÑÖб¬·¢Ô½½ç¶ÁÎó²î¡£¡£¡£¡£¡£¡£¡£
ÕâÀïÒ²Ö´ÙDZ¬·¢ÁËÄÚ´æÔ½½ç¶ÁÈ¡£¡£¡£¡£¡£¡£¡£¬£¬£¬£¬Ã»Óн«¶ÁÈ¡µÄÊý¾Ýй¶µ½¿Í»§¶ËÖС£¡£¡£¡£¡£¡£¡£ÏÂÃæÕÒµ½·¢ËÍ·µ»Ø°üµÄ´úÂ룬£¬£¬£¬Éó²éÔõÑù±¬·¢ÄÚ´æ×ß©¡£¡£¡£¡£¡£¡£¡£
´Ó378ÐдúÂë×îÏÈÊÇÆÊÎöL2CAP_CMD_CONN_REQÏÂÁî·ÖÖ§£¬£¬£¬£¬379ÐдúÂ룬£¬£¬£¬ÏÈÔ½½ç¶ÁÈ¡Á½¸ö×Ö½ÚµÄcon_info.psm£¬£¬£¬£¬380ÐдúÂëÔ½½ç¶ÁÈ¡Á½¸ö×Ö½ÚµÄrcid¡£¡£¡£¡£¡£¡£¡£381ÐÐŲÓÃl2cu_find_rcb_by_psmº¯Êýͨ¹ýcon_info.psmÈ¥±éÀúѰÕÒ×¢²á¿ØÖÆ¿éµØµã¡£¡£¡£¡£¡£¡£¡£ÕâÀï¼òÆÓÏÈÈÝÒ»ÏÂPSMÕâ¸ö¿´·¨¡£¡£¡£¡£¡£¡£¡£
PSMÈ«³ÆÎªProtocol/ServiceMultiplexer£¬£¬£¬£¬PSMµÄ³¤¶È×îÉÙÊÇ2×Ö½Ú£¬£¬£¬£¬ËüµÄÖµÓ¦µ±ÊÇÆæÊý£¬£¬£¬£¬¾ÍÊÇ×îµÍµÄbyteµÄ×îµÍλ±ØÐèΪ1¡£¡£¡£¡£¡£¡£¡£ÁíÍ⣬£¬£¬£¬PSMµÄ×î¸ßbyteµÄ×îµÍλӦµ±Îª0¡£¡£¡£¡£¡£¡£¡£Ëü¿ÉÒÔ±È2×Ö½Ú³¤£¬£¬£¬£¬PSMÓÉÁ½¸ö¹æÄ£¶Î×é³É£¬£¬£¬£¬µÚÒ»¸ö¹æÄ£¶ÎÊÇSIGÓÃÀ´ÌåÏÖ¶ÔÓ¦protocolµÄ£¬£¬£¬£¬µÚ¶þ¸ö¹æÄ£¶ÎÊǶ¯Ì¬ÉêÇëµÄºÍSDPÁ¬ÏµÊ¹Óᣡ£¡£¡£¡£¡£¡£Õâ¸öÖµÓÃÀ´Ö§³ÖÌØ¶¨protocolµÄ²î±ðʵÏÖ¡£¡£¡£¡£¡£¡£¡£ÒÔÊÇ£¬£¬£¬£¬ÔÚÉêÇëPSMµÄʱ¼ä¶¼ÊÇ´Ó0x1001×îÏÈÉêÇëµÄ¡£¡£¡£¡£¡£¡£¡£Ôµ¹ÊÔÓɾÍÊÇ0x0001~0x0eff¶¼ÊDZ»SIG±£´æµÄ¡£¡£¡£¡£¡£¡£¡£ÄÇôÕâЩ±£´æµÄÖµ¶¼¸÷×Ô¶ÔÓ¦ÁËÄÄЩprotocolÄØ£¿£¿£¿£¿£¿£¿£¿Ïêϸ¼ûÏÂͼ¡£¡£¡£¡£¡£¡£¡£
´úÂë382ÐÐÅжÏp_rcbÊÇ·ñΪNULL£¬£¬£¬£¬ÈôÊÇΪ¿Õ¾ÍŲÓÃl2cu_reject_connectionº¯Êý£¬£¬£¬£¬Ïêϸ¿´Ò»Ï¸ú¯Êý´úÂë¡£¡£¡£¡£¡£¡£¡£
´Ó´úÂë520Ðе½523ÐУ¬£¬£¬£¬Í¨¹ýºêUINT6_TO_STREAM½«Êý¾ÝдÈëpÖ¸ÏòµÄÄÚ´æÖС£¡£¡£¡£¡£¡£¡£
ÆäÖÐremote_cid¾ÍÊÇ֮ǰԽ½ç¶ÁÈ¡µÄÁ½¸ö×Ö½ÚÊý¾Ý¡£¡£¡£¡£¡£¡£¡£½á¹¹ºÃÏìÓ¦Êý¾Ý°üºó£¬£¬£¬£¬´úÂë525ÐÐŲÓÃl2c_link_check_send_pkts½«ÏìÓ¦°ü·¢Ë͵½¿Í»§¶Ë¡£¡£¡£¡£¡£¡£¡£
ÔÚÁùÔ·ÝandroidÇ徲ͨ¸æÖУ¬£¬£¬£¬CVE-2018-9359¡¢CVE-2018-9360¡¢CVE-2018-9361Èý¸öÎó²îµÄ²¹¶¡ÊÇÒ»ÑùµÄ¡£¡£¡£¡£¡£¡£¡£²¿·Ö²¹¶¡´úÂëÈçÏ¡£¡£¡£¡£¡£¡£¡£
¿ÉÒÔ¿´³ö£¬£¬£¬£¬²¹¶¡ÖÐÌí¼ÓÁ˳¤¶ÈÅжϡ£¡£¡£¡£¡£¡£¡£ÈôÊÇp+2>p_next_cmd²»ÎªÕ棬£¬£¬£¬ËµÃ÷±£´ædataÊý¾ÝÓò£¬£¬£¬£¬È»ºó²Å×îÏȶÁÈ¡×Ö½Ú¡£¡£¡£¡£¡£¡£¡£
3.2 CVE-2018-9365
£¨ÒÔÏÂÆÊÎö»ùÓÚandroid-8.0.0_r4°æ±¾Ô´Â룩
CVE-2018-9365ÊÇSMP£¨security manager protocol£©ÐÒéÖÐÒ»¸öÊý×éÔ½½çÎó²î¡£¡£¡£¡£¡£¡£¡£¸ÃÎó²î·ºÆðÔÚsmp_sm_eventº¯ÊýÖУ¬£¬£¬£¬´úÂë·¾¶Îª£º\smp\smp_main.cc¡£¡£¡£¡£¡£¡£¡£¹È¸è¹Ù·½²¹¶¡´úÂëÈçÏ¡£¡£¡£¡£¡£¡£¡£
´Ó²¹¶¡ÖпÉÒÔ¿´µ½£¬£¬£¬£¬ÕâÀïÅжÏÁËp_cb->roleÊÇ·ñ´óÓÚ1£¬£¬£¬£¬ÈôÊÇ´óÓÚ1±¨´í·µ»Ø£¬£¬£¬£¬²¹¶¡´úÂëÏÂÒ»ÐоÍÊÇÒÔp_cb->roleΪϱêÔÚsmp_entry_tableÊý×éÖвéÕÒ¡£¡£¡£¡£¡£¡£¡£Smp_entry_tableÊý×é½ç˵ÈçÏ¡£¡£¡£¡£¡£¡£¡£
¿ÉÒÔ¿´µ½£¬£¬£¬£¬smp_entry_tableÊý×éÖÐÖ»ÓÐÁ½Ï£¬£¬£¬Ò»¸öÊÇÕë¶ÔÖ÷×°±¸£¬£¬£¬£¬Ò»¸öÊÇÕë¶Ô´Ó×°±¸¡£¡£¡£¡£¡£¡£¡£µ±ÓÐÊý¾Ý°üͨ¹ýL2CAPÔÚSMPÐŵÀÖÐÎüÊÕµ½Ê±£¬£¬£¬£¬»áŲÓÃsmp_data_receivedº¯Êý¾ÙÐд¦Öóͷ£¡£¡£¡£¡£¡£¡£¡£Smp_data_receivedº¯Êý´úÂëÈçÏ¡£¡£¡£¡£¡£¡£¡£
´úÂë146Ðж¨Î»µ½ÄÚ´æÖÐSMPÊý¾Ý°üλÖᣡ£¡£¡£¡£¡£¡£´úÂë150ÐÐͨ¹ýSTREAM_TO_UINT8ºêÈ¡³öcmd¡£¡£¡£¡£¡£¡£¡£
µÚ160ÐдúÂëÅжÏcmdµÄÀàÐÍÊÇ·ñΪÅä¶ÔÇëÇóÖ¸Áî»òÕßÇå¾²ÇëÇóÖ¸Áî¡£¡£¡£¡£¡£¡£¡£ÈôÊÇÊÇ£¬£¬£¬£¬µÚ164ÐÐ×îÏȶÔp_cb->role¾ÙÐи´ÖÆ¡£¡£¡£¡£¡£¡£¡£Í¨¹ýÃû³ÆÅжϣ¬£¬£¬£¬L2CA_GetBleConnRoleº¯ÊýÓ¦¸ÃÊÇͨ¹ýÀ¶ÑÀµØµã»ñÈ¡À¶ÑÀ×°±¸µÄ½ÇÉ«ÐÅÏ¢¡£¡£¡£¡£¡£¡£¡£¹ØÓÚÀ¶ÑÀ×°±¸À´Ëµ£¬£¬£¬£¬Ö»ÓÐÁ½ÖÖ½ÇÉ«£¬£¬£¬£¬Ò»ÊÇÖ÷×°±¸½ÇÉ«£¬£¬£¬£¬¶þÊÇ´Ó×°±¸½ÇÉ«¡£¡£¡£¡£¡£¡£¡£L2CA_GetBleConnRoleº¯Êý´úÂëÈçÏ¡£¡£¡£¡£¡£¡£¡£
µÚ201Ðнç˵ÁËrole£¬£¬£¬£¬Í¬Ê±¸ørole¸³ÖµÎªHCI_ROLE_UNKNOWN¡£¡£¡£¡£¡£¡£¡£ºê½ç˵ÈçÏÂËùʾ¡£¡£¡£¡£¡£¡£¡£
RoleÏȱ»¸´ÖÆÎª0xff£¬£¬£¬£¬´úÂë205ÐÐÊÇͨ¹ýÀ¶ÑÀµØµã±éÀúѰÕÒp_lcb£¬£¬£¬£¬ÈôÊÇp_lcbΪ¿Õ£¬£¬£¬£¬ÔòÖ±½Ó·µ»ØHCI_ROLE_UNKNOWN¡£¡£¡£¡£¡£¡£¡£P_cb->role±»¸³ÖµÎª0xffºó£¬£¬£¬£¬ºóÐø´úÂëÖ±½ÓŲÓÃÁËsmp_sm_eventº¯Êý¡£¡£¡£¡£¡£¡£¡£´úÂëÈçÏÂËùʾ¡£¡£¡£¡£¡£¡£¡£
ŲÓÃsmp_sm_eventº¯Êý£¬£¬£¬£¬²¹¶¡Ç°µÄ´úÂëÔÚ957ÐÐÓÉÓÚûÓÐÅжÏp_cb->roleµÄ´óС£¡£¡£¡£¡£¡£¡£¬£¬£¬£¬µ¼ÖÂÊý×éÔ½½ç»á¼û¡£¡£¡£¡£¡£¡£¡£
4¡¢×ܽá
ͨ¹ý¶Ô¶à¸öÀ¶ÑÀÎó²îµÄÆÊÎö£¬£¬£¬£¬·¢Ã÷AndroidÀ¶ÑÀ×é¼þÖеÄÎó²î¶àÊǽÏΪ³õ¼¶µÄ´úÂëbugµ¼Öµģ¬£¬£¬£¬²¢ÇÒÎó²î¶à·ºÆðÔÚ¶ÔÊý¾Ý°üµÄÆÊÎö´úÂëÂß¼ÖС£¡£¡£¡£¡£¡£¡£Õë¶ÔÅû¶µÄÕâô¶àÀ¶ÑÀÎó²î£¬£¬£¬£¬°²×¿ÊÖ»úÓû§»¹Ðèʵʱ¸üйٷ½ÍÆË͵IJ¹¶¡£¡£¡£¡£¡£¡£¡£¬£¬£¬£¬½«Çå¾²Òþ»¼½µµÍµ½×îµÍ¡£¡£¡£¡£¡£¡£¡£
5¡¢Ïà¹ØÁ´½Ó
[1] https://android.googlesource.com/platform/system/bt/+/b66fc16410ff96e9119f8eb282e67960e79075c8%5E%21/#F0
[2] https://android.googlesource.com/platform/system/bt/+/ae94a4c333417a1829030c4d87a58ab7f1401308%5E%21/#F0
[3] https://blog.quarkslab.com/a-story-about-three-bluetooth-vulnerabilities-in-android.html


¾©¹«Íø°²±¸11010802024551ºÅ