ÔÚµ±½ñÊý×Ö»¯Ê±´ú£¬²Ù×÷ϵͳ°²È«µÄÖØÒªÐÔÓú·¢Í»ÏÔ¡£Linux²Ù×÷ϵͳ©¶´ÆØ³öƵÂʳÊÏÖÖðÄêÉÏÕǵÄÇ÷ÊÆ£¬ÐÂÐ͹¥»÷²ã³ö²»Ç¹¥»÷ÕßÀûÓ鶴ʵÏÖȨÏÞÌáÉý¡¢ÒµÎñ¹Ø¼üÐÅÏ¢µÄ»ñÈ¡µÈ£¬ÑÏÖØÆÆ»µÁ˲Ù×÷ϵͳµÄ»úÃÜÐÔ¡¢¿ÉÓÃÐÔºÍÍêÕûÐÔ¡£
Ò». ´«Í³½â¾ö·½°¸ÃæÁÙÌôÕ½
´«Í³°²È«¼ì²âºÍ·ÀÓù·½°¸²ÉÓÃÄÚºËÄ£¿é¼¼Êõ£¬ÄÚºËÄ£¿é¼¼ÊõÊÇͨ¹ý±àдÄÚºËÄ£¿éÀ´À©Õ¹²Ù×÷ϵͳµÄ¹¦ÄÜ£¬ÄÚºËÄ£¿é¿ÉÒÔÖ±½Ó·ÃÎʺÍÐ޸IJÙ×÷ϵͳÄںˣ¬¿ÉÒÔʵÏָ߼¶±ð¿ØÖƺͷḻµÄ¹¦ÄÜ£¬µ«±àд²»µ±µÄÄÚºËÄ£¿é¿ÉÄܵ¼ÖÂÄں˱ÀÀ£»òÒýÈ밲ȫ©¶´¡£
eBPFÌṩÁËÒ»ÖÖ°²È«¡¢¿É±à³ÌµÄ·½Ê½À´À©Õ¹Äں˹¦ÄÜ£¬eBPF³ÌÐòÔÚÄÚºËÖÐÔËÐÐʱ»áÊܵ½ÑϸñµÄ°²È«ÏÞÖÆ£¬Òò´Ë²»»á¶ÔϵͳµÄÎȶ¨ÐԺͰ²È«ÐÔ²úÉúÖ±½ÓÓ°Ï죬¿ÉÒÔʵÏÖÉî¶ÈµÄϵͳ¹Û²âÄÜÁ¦ºÍ×Ô¶¨ÒåÀ©Õ¹ÄÜÁ¦¡£
¶þ. »ùÓÚeBPFµÄÐÂÒ»´úÖ÷»ú°²È«½â¾ö·½°¸
PGµç¾ºÐÅÏ¢ÔÆÂÍ·þÎñPGµç¾º¹ÙÍø²Ù×÷ϵͳKeyarchOSÌṩÇáÁ¿»¯µÄ°²È«·ÀÓù×é¼þKSecure£¬²ÉÓÃeBPF¼¼Êõ·Ïߣ¬ÌṩÖ÷»ú°²È«¼ì²âºÍ·ÀÓùÄÜÁ¦£¬ÔÚÔöÇ¿²Ù×÷ϵͳ°²È«ÐԺͺϹæÐÔµÄͬʱ£¬½â¾ö´«Í³ÄÚºËÄ£¿é·½Ê½´øÀ´µÄϵͳÎȶ¨ÐÔºÍÐÔÄÜÎÊÌâ¡£
1.Ö÷Òª¹¦ÄÜ
KSecure°²È«·ÀÓù×é¼þµÄÖ÷Òª¹¦ÄÜÈçÏ£º
£¨1£©¹Ø¼üÎļþ/½ø³Ì·À»¤£ºÖ§³ÖÎļþºÍĿ¼µÄ·À»¤£¬·ÀÖ¹ºËÐÄÒµÎñÎļþ±»´Û¸Ä¡¢É¾³ýµÈÐÐΪ¡£Ö§³Ö¹Ø¼ü½ø³Ì·À»¤£¬±£»¤ºËÐÄÒµÎñ½ø³Ì²»±»¶ñÒâÖÕÖ¹¡¢É¾³ý¡¢ÐÅÏ¢×¢È룻
£¨2£©Ö÷»úÈëÇÖ¼ì²â£º»ùÓÚ¹æÔòÒýÇæ¿ÉÒԶԺڿ͵ÄÈëÇÖÐÐΪ½øÐмì²âºÍ×Ô¶¯´¦Ö᣻ùÓÚ¡°ÓÕ¶ü¡±ÐÐΪ¼à²âµÄÀÕË÷²¡¶¾·ÀÓù£¬¼°Ê±·¢ÏÖºÍ×èÖ¹ÀÕË÷²¡¶¾¼ÓÃÜÐÐΪ£»
£¨3£©°²È«»ùÏß¼ì²â£º»ùÓڵȱ£ºÍCIS±ê×¼ÐγÉ֪ʶ¿â£¬Ìṩ»ùÓÚÄ£°åµÄ»ùÏß¼ì²â¡¢ÐÞ¸´ºÍ»ØÍ˹¦ÄÜ¡£°ïÖú·¢ÏÖÉí·Ý¼ø±ð¡¢·ÃÎÊ¿ØÖÆ¡¢°²È«É󼯡¢ÈëÇÖ·À·¶¡¢Ê£ÓàÐÅÏ¢±£»¤µÈ·½ÃæÇ±Ôڵݲȫ·çÏÕ£¬Ö§³Ö»ùÏßÖµ×Ô¶¨ÒåºÍÁé»îÀ©Õ¹£»
£¨4£©°²È«¹ÜÀí£ºÖ§³Ö°²È«ÌØÐÔ¶¯Ì¬¼ÓÔØ¡¢¶Ô°²È«×é¼þCPU×ÊÔ´Õ¼ÓÃÏÞÖÆ¡¢°²È«²ßÂÔÈȼÓÔØ¡¢·þÎñÆôÍ£µÈ¹ÜÀíµÈ¹¦ÄÜ¡£

ͼ KSecure°²È«×é¼þ¹¦Äܼܹ¹Í¼
2.ÕûÌå¼Ü¹¹
»ùÓÚeBPFµÄϵͳÄÚ¶à²ã´Îhook¼¼Êõ£¬½«eBPF³ÌÐòhookµ½²Ù×÷ϵͳÄں˵Ķà¸ö²ã¼¶£¨LSM¡¢syscall¡¢network¡¢kprobeÄں˺¯Êý£©£¬ÆäÖÐLSM¡¢syscall¡¢networkµÄhookµã¾ßÓÐ¼à¿ØºÍÀ¹½ØÄÜÁ¦£¬kprobeÄں˺¯ÊýhookµãÖ»¾ßÓÐ¼à¿ØÄÜÁ¦¡£Í¨¹ýÔÚ¸÷¸öhookµã¼ÓÔØ°²È«²ßÂÔʵÏÖ¶ÔϵͳºÍÓ¦ÓóÌÐòÐÐΪµÄ¼à¿ØºÍÀ¹½Ø¡£

ͼ KSecure°²È«×é¼þ¼¼Êõ¼Ü¹¹Í¼
3.¹Ø¼ü¼¼Êõ
ÔÚKSecure°²È«×é¼þÖУ¬Éæ¼°ÈçÏÂÁ½¸ö¹Ø¼ü¼¼Êõ¡£
3.1 eBPF-LSM hook¼¼Êõ
LSM£¨Linux Security Modules£©ÊÇLinuxÄÚºËÖÐÓÃÓÚÖ§³Ö¸÷ÖÖPGµç¾º¹ÙÍø»ú°²È«Ä£Ð͵Ŀò¼Ü£¬ÓÃÓÚÔÚLinuxÄÚºËÖÐʵÏÖ°²È«²ßÂÔºÍÇ¿ÖÆ·ÃÎÊ¿ØÖÆ¡£Linux Kernel 5.7ÒýÈëÁËLSMÀ©Õ¹eBPF£¨¼ò³ÆBPF-LSM£©£¬¶øÎÞÐèÅäÖÃLSMÄ£¿é£¨SELinux¡¢AppArmorµÈ£©»ò¼ÓÔØ×Ô¶¨ÒåÄÚºËÄ£¿é£¬Í¨¹ýÔÚLSM²ãÃæµÄÎļþ¡¢½ø³Ì¡¢ÍøÂçµÈhook¼ÓÔØeBPF³ÌÐò£¬»ñȡӦÓõÄÒì³£ÐÐΪ£¬Í¨¹ýÓëÄÚÖúÍ×Ô¶¨ÒåµÄ°²È«²ßÂԶԱȺ󣬽øÐÐϸÁ£¶ÈµÄ£¨º¯Êý¼¶£©ÊµÊ±À¹½Ø£¬ÊµÏÖÈëÇÖ¼ì²âºÍ¹Ø¼üÎļþºÍ½ø³Ì·ÀÓù¹¦ÄÜ¡£

ͼ ¹Ø¼üÒµÎñ·À»¤¼Ü¹¹Í¼
ÒÔÎļþ·À»¤ÎªÀý£¬½éÉÜKSecure°²È«×é¼þÈçºÎ½øÐÐÎļþ·À»¤£¬ÈçÏÂͼËùʾ£º

ͼ Îļþ·À»¤Ê¾ÀýÁ÷³Ìͼ
£¨1£©¼ÓÔØeBPF³ÌÐò£ºKSecure°²È«×é¼þÓû§Ì¬Agent³ÌÐò½«eBPF³ÌÐò¼ÓÔØµ½LSMµÄHookµãÉÏ£»
£¨2£©ÅäÖòßÂÔ£ºÍ¨¹ýKSecure°²È«×é¼þµÄ²ßÂÔÅäÖÃÎļþ£¨YAML¸ñʽ£©½øÐвßÂÔÉèÖã»
£¨3£©Ï·¢²ßÂÔ£º°²È«×é¼þµÄAgent½«YAML²ßÂÔ½âÎöÖÁÄÚºË̬´´½¨µÄeBPF-map£»
£¨4£©ºÚ¿ÍÈëÇÖ£º¹¥»÷Õß¶Ô±»±£»¤µÄÎļþ½øÐб༻òɾ³ýµÈ²Ù×÷£¬½øÈëÄÚºËLSM hookµã£¬´¥·¢¶ÔÓ¦µÄeBPF³ÌÐò£»
£¨5£©²ßÂÔÆ¥Å䣺ÄÚºËÖÐeBPF³ÌÐò»ñÈ¡Ö÷Ìå½ø³ÌºÍ¿ÍÌå·¾¶µÈÐÅÏ¢£¬Óë´æ´¢ÔÚeBPF-map°²È«²ßÂÔºÍÆ¥Åä¡£ÔÚ»ñÈ¡Ö÷Ìå½ø³Ìʱ£¬²ÉÓÃ5.½ø³ÌÁ´¸ú×Ù¼¼Êõ£¬¸ú×Ù½ø³ÌµÄµ÷Óùý³Ì£¬ÐÅÈνø³Ìµ÷ÓõĽø³Ì/½Å±¾µÈ¾ù¼Ì³ÐȨÏÞ£»
£¨6£©²Ù×÷À¹½Ø£ºhookµã¶ÔÓ¦µÄeBPF³ÌÐò×èÖ¹±à¼ºÍɾ³ý±»±£»¤ÎļþµÄ²Ù×÷£»
£¨7£©Éϱ¨ÐÅÏ¢£ºeBPF³ÌÐòͨ¹ýeBPF-map£¨Ring bufferÀàÐÍ£©Éϱ¨¸øAgent£»
£¨8£©¼Ç¼ÈÕÖ¾£ºAgent·â×°Æ¥Åä²ßÂÔÐÅÏ¢²¢¼Ç¼µ½°²È«ÈÕÖ¾Îļþ¡£
3.2 »ùÓÚeBPFµÄÄÚºË¼à¿Ø¼¼Êõ
½«eBPF³ÌÐòͨ¹ýkprobe¡¢tracepoint¼¼Êõ¹ÒÔØÖÁÄںˣ¬¼à¿ØÏµÍ³ÖеÄÎļþ²Ù×÷¡¢½ø³Ì´´½¨¡¢ÍøÂçÁ¬½ÓµÈÐÐΪ¡£»ùÓÚMITRE ATT&CK£¨Adversarial Tactics, Techniques and Common Knowledge£¬¼´¶Ô¿¹Õ½ÊõºÍ¼¼Êõ֪ʶ¿â£©¿ò¼Ü¹¹½¨ÈëÇÖ¼ì²âÄÚÖùæÔò£¬½áºÏ×Ô¶¨ÒåµÄ¼ì²â¹æÔòΪÈëÇÖ¼ì²âÒýÇæÌṩÅжÏÒÀ¾Ý£¬ÊµÏÖÈëÇÖʼþʶ±ðºÍ¹¥»÷×è¶Ï¡£KSecure°²È«×é¼þÈëÇÖ¼ì²â¹¦ÄÜÖ÷ÒªÓÉÊý¾Ý²É¼¯¡¢Êý¾Ý»º³å¡¢Ô¤´¦Àí¡¢¹æÔòÒýÇæµÈÄ£¿é¹¹³É¡£

ͼ ÈëÇÖ¼ì²â¹¦ÄÜÄ£¿é¼Ü¹¹Í¼
£¨1£©Êý¾Ý²É¼¯£º½èÖúeBPF³ÌÐò²É¼¯Îļþ¡¢½ø³Ì¡¢ÍøÂçµÈϵͳµ÷ÓÃÈë²ÎÒÔ¼°·µ»ØÖµ£¬²¢ÉÏ´«ÖÁÊý¾Ý»º³åÇø£»
£¨2£©Êý¾Ý»º³å£ºÉèÖÃRing bufferÀàÐ͵Ļº³åÇøÓÃÓÚÒѲɼ¯Êý¾ÝÁÙʱ´æ´¢£¬eBPF³ÌÐò¿É½«²É¼¯Êý¾ÝдÈ뻺³åÇø£¬Ô¤´¦ÀíÄ£¿éÑ»·¶ÁÈ¡»º³åÇøÊý¾Ý£»
£¨3£©Ô¤´¦Àí£º½«»º³åÇøÊý¾Ý¸ù¾Ý²»Í¬µÄϵͳµ÷ÓýâÎö³ÉÌØ¶¨µÄÊý¾Ý½á¹¹£¬²¢Í¨¹ýʼþÀàÐ͵ÈÌõ¼þ£¬¶ªÆú²»·ûºÏÌõ¼þµÄÊý¾Ý£¬±ãÓÚ¹æÔòÒýÇæÖ´ÐйæÔòÆ¥Å䣻
£¨4£©¹æÔòÒýÇæ£º½«ÒѼÓÔØµÄ¹æÔò½âÎö³ÉÄÚ´æ¶ÔÏó£¬ÀȡԤ´¦ÀíºóµÄÊý¾ÝÓëÄÚ´æÖеĹæÔò¶ÔÏó½øÐбȶԣ¬Óë¹æÔòÆ¥ÅäµÄÊý¾ÝÕï¶ÏΪÈëÇÖÐÐΪ£¬¸ñʽ»¯ºóÊä³ö¡£
ÒÔ·´µ¯shellÈëÇÖ¼ì²âΪÀý£¬½éÉÜKSecure°²È«×é¼þÈçºÎ¼ì²âÈëÇÖÐÐΪ£¬ÈçÏÂͼËùʾ£º

ͼ ·´µ¯shellÈëÇÖ¼ì²âʾÀýÁ÷³Ìͼ
£¨1£©¹æÔò£º¶ÁÈ¡yaml¸ñʽµÄ¼ì²â¹æÔòÖÁÄڴ棬ÖðÌõ½âÎö¹æÔò£¬½«¹æÔò¹Ø¼ü×Ö½âÎöΪÊý¾Ý¶ÔÏ󣬲¢½«¹æÔòÄÚÈݱ£´æÖÁ¶ÔÏóÄÚ£¬±ãÓÚ¹æÔòÆ¥Å䣬ÒÔÏÂΪ·´µ¯shellÈëÇÖÐÐΪƥÅäÌõ¼þ£»
£¨2£©BPF³ÌÐò£º¹æÔòÒýÇæ½«eBPF³ÌÐòͨ¹ýtracepointºÍkprobe¼¼Êõ¹ÒÔØÖÁϵͳµ÷Óú¯Êý¡£¾ßÌå¶øÑÔ£¬¶ÔÓÚ·´µ¯shellµÄ¼ì²â£¬Ôò¹ÒÔØÖÁconnectϵͳµ÷Óã»
£¨3£©·´µ¯shell£º·´µ¯shellÊÇÒ»ÖÖÍøÂç¹¥»÷¼¼Êõ£¬ÓÃÓÚͨ¹ýÔ¶³ÌÖ÷»úÉϵÄShell(ÃüÁîÐÐÖÕ¶Ë)Óë¹¥»÷Õß½¨Á¢Á¬½Ó£¬´Ó¶ø¿ØÖÆÊܹ¥»÷Ö÷»ú£»
£¨4£©ÈÕÖ¾£º½«ÏµÍ³²úÉúµÄÍøÂçÁ¬½ÓÉÏ´«ÖÁÊý¾Ý»º³åÇø¡£¼àÌýRing bufferÖÐÍøÂçÁ¬½ÓÐÅÏ¢£¬Í¨¹ýBPF¸¨Öúº¯ÊýÑ»·¶ÁÈ¡Êý¾Ý£¬²¢½«Êý¾Ýת½»Ô¤´¦ÀíÄ£¿é£»
£¨5£©Æ¥Å䣺½«½âÎö²¢¾¹ýÂ˺óµÄÍøÂçÁ¬½ÓÈÕÖ¾¶ÔÏóÓë¹æÔò¶ÔÏó±È¶Ô£¬Æ¥Å乿ÔòµÄÍøÂçÁ¬½ÓÕï¶ÏΪ·´µ¯shellÈëÇÖ£»
£¨6£©¸æ¾¯£º½«ÈÕÖ¾ÐÅÏ¢°´ÕÕ¹æÔòÅäÖõĸñʽÊä³öΪ¸æ¾¯ÐÅÏ¢¡£
ËÄ. Ó¦Óó¡¾°
»ùÓÚeBPF¼¼Êõ°²È«ÔöÇ¿×é¼þ¾ßÒÔϼ¸¸ö·½ÃæµÄÓ¦Óó¡¾°£º
£¨1£©°²È«¼Ó¹Ì£ºÌáÉý²Ù×÷ϵͳµÄºÏ¹æÐԺͰ²È«ÐÔ¡£Ö§³ÖÓû§½áºÏʵ¼ÊµÄ°²È«ÐèÇóÑ¡Ôñʵʩ¼Ó¹ÌºÍÀ©Õ¹£¬ÒÔ±ã¸üºÃµØÂú×ã¶Ô²»Í¬Óû§²»Í¬³¡¾°µÄÅäÖð²È«»ù×¼ÒªÇó¡£
£¨2£©ºÚ¿ÍÈëÇÖ£º½µµÍÒòϵͳ©¶´ÀûÓõ¼ÖµÄÌáȨ¹¥»÷¡¢Rootkit¹¥»÷¡¢½ø³Ì×¢ÈëµÈ·çÏÕ¡£¼°Ê±·¢ÏÖ²¢×èÖ¹ÀÕË÷²¡¶¾¼ÓÃÜÐÐΪ£¬¼õÉÙÀÕË÷²¡¶¾¶ÔÒµÎñÎļþµÄ½øÒ»²½ÆÆ»µ£¬³ÉΪÀÕË÷²¡¶¾·À»¤×îºóÒ»µÀÆÁÕÏ¡£
£¨3£©ÒµÎñ·À»¤£ºÎª¹Ø¼üÒµÎñ·þÎñPGµç¾º¹ÙÍøÌṩ±£»¤£¬½öÔÊÐíºÏ·¨Ó¦ÓóÌÐò¶Ô¿Í»§µÄ¹Ø¼üÒµÎñÎļþ½øÐвÙ×÷£¬ÏÞÖÆÏµÍ³³¬¼¶¹ÜÀíԱȨÏÞ£¬·ÀÖ¹Îó²Ù×÷»òÕ˺Åй¶µ¼ÖµÄÖØÒªÎļþ/ÅäÖÃµÄÆÆ»µ¡£
»ùÓÚeBPF¼¼ÊõµÄ°²È«×é¼þKSecureÒÑÔÚÁúòáÉçÇøÏµÍ³°²È«SIGÖпªÔ´£¬ÎÒÃÇÈȳÀ»¶Ó¹ã´óÈȰ®¼¼Êõ´´Ð¡¢¹Ø×¢°²È«Ñо¿µÄͬÐлï°éÃÇһͬ¼ÓÈëÕⳡ̽Ë÷Ö®Â㬹²Í¬ÍÚ¾òeBPF¼¼ÊõÔÚ°²È«·À»¤ÁìÓòµÄÎÞÏÞDZÄÜ£¬Ð¯ÊÖÓÅ»¯²¢ÍƹãÇ°ÑØµÄ°²È«½â¾ö·½°¸£¬ÒÔ¹²½¨¸üΪ¿É¿¿¡¢°²È«µÄ²Ù×÷ϵͳÉú̬»·¾³¡£
²úÆ·ÏÂÔØ
²úÆ·¼¤»î
ÊÛǰ×Éѯ
ÊÛºó·þÎñ
»Øµ½¶¥²¿
ÊÛǰ×Éѯ
ÊÛºó·þÎñ