|
Message-ID: <20181113043309.GC28677@pi3.com.pl> Date: Tue, 13 Nov 2018 05:33:09 +0100 From: Adam Zabrocki <pi3@....com.pl> To: lkrg-users@...ts.openwall.com Cc: announce@...ts.openwall.com Subject: Re: LKRG 0.5 Hi, I was able to repro this NULL deref (thanks for this test!) and I've fixed it via this commit: https://bitbucket.org/Adam_pi3/lkrg-main/commits/7c9b79bea77df2dc4944b0fe29f4dc8c3d26b302 In short it happens because of the malicious activity of khook_demo module. This module hooks "inode_permission" function (kernel core .text section) and redirects to the internal function "khook_inode_permission" inside of the khook_demo module. Hook is being done in a very smart way by modifying long NOP (injected by *_JUMP_LABEL) to JMP instruction (emulating *_JUMP_LABEL functionality). LKRG correctly detects not-legit modification but new code has a bug that if modification happens to the core kernel .text from the 3rd party module, and falls perfectly into *_JUMP_LABEL scenario, it detect this bad behaviour but then might generate NULL deref. Thanks for testing it. Now LKRG detects not-legit hook and do not crash the kernel (unless you enable lkrg.ci_panic=1 via sysctl). *_JUMP_LABEL support in LKRG is already complicated and will be rewritten in the future versions - but it will be bigger change which requires some time to research. Thanks, Adam On Mon, Nov 12, 2018 at 04:40:31PM +0400, Ilya Matveychikov wrote: > Hey, > > While recoding a video of LKRG 5.0 bypass I faced a BUG. So, no video at this time > but maybe next time when this bug will be fixed :-) > > [110338.513153] BUG: unable to handle kernel NULL pointer dereference at (null) > [110338.963680] IP: [<ffffffffc0638c89>] p_cmp_bytes+0x239/0x940 [p_lkrg] > [110339.482601] PGD 0 > [110339.546025] Oops: 0000 [#1] SMP > [110339.606575] Modules linked in: khook_demo(OE) p_lkrg(OE) ufs msdos xfs vboxsf(OE) isofs ppdev binfmt_misc input_leds serio_raw parport_pc video parport vboxguest(OE) ib_iser rdma_cm iw_cm ib_cm ib_core configfs iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi autofs4 btrfs raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c raid1 raid0 multipath linear crct10dif_pclmul crc32_pclmul vboxvideo(OE) ghash_clmulni_intel drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops aesni_intel ttm mptspi aes_x86_64 lrw glue_helper ablk_helper cryptd scsi_transport_spi mptscsih drm psmouse e1000 mptbase > [110343.097907] CPU: 1 PID: 3858 Comm: kworker/u8:2 Tainted: G OE 4.8.0-53-generic #56~16.04.1-Ubuntu > [110343.559133] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006 > [110343.947920] Workqueue: events_unbound p_check_integrity [p_lkrg] > [110343.997952] task: ffff9d7a7aa8d880 task.stack: ffff9d7a69cd4000 > [110344.778608] RIP: 0010:[<ffffffffc0638c89>] [<ffffffffc0638c89>] p_cmp_bytes+0x239/0x940 [p_lkrg] > [110345.086806] RSP: 0018:ffff9d7a69cd7a10 EFLAGS: 00010086 > [110345.531187] RAX: 0000000000000000 RBX: ffffffffc00992e0 RCX: 0000000000000022 > [110345.947264] RDX: 0000000000000000 RSI: 0000000000004000 RDI: ffffffffc00992e0 > [110345.982935] RBP: ffff9d7a69cd7d70 R08: 0000000000000000 R09: 0000000000000190 > [110346.415325] R10: ffffc06fc1735898 R11: ffffffffc009b100 R12: ffffc06fc0c01000 > [110346.960013] R13: 0000000000293898 R14: ffff9d7a69cd7c51 R15: ffffc06fc0e94898 > [110347.167329] FS: 0000000000000000(0000) GS:ffff9d7a7fc80000(0000) knlGS:0000000000000000 > [110347.558976] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > [110347.587279] CR2: 0000000000000000 CR3: 000000003a9ad000 CR4: 00000000000406e0 > [110347.842746] Stack: > [110347.962880] ffff9d7a7bb95980 ffff9d7a69cd7a50 0000000000000000 ffffffff992002b8 > [110348.742840] ffffffff99493b50 0000000000293899 ffffc06fc0e94899 0000000000000022 > [110349.267536] 000000000089f697 ffffc06fc1735898 000000000000000f ffffc06fc14a2000 > [110349.564549] Call Trace: > [110349.571774] [<ffffffff992002b8>] ? 0xffffffff992002b8 > [110349.931856] [<ffffffff99493b50>] ? writenote+0xc0/0xc0 > [110349.967838] [<ffffffffc06395a2>] p_check_integrity+0x212/0x1980 [p_lkrg] > [110350.058749] [<ffffffff992c1451>] ? pick_next_task_fair+0x111/0x4f0 > [110351.175217] [<ffffffff9929d89b>] process_one_work+0x16b/0x4a0 > [110351.551869] [<ffffffff9929dc1b>] worker_thread+0x4b/0x500 > [110351.567748] [<ffffffff9929dbd0>] ? process_one_work+0x4a0/0x4a0 > [110351.595704] [<ffffffff9929dbd0>] ? process_one_work+0x4a0/0x4a0 > [110351.623514] [<ffffffff992a3fb8>] kthread+0xd8/0xf0 > [110351.659862] [<ffffffff99a9aa9f>] ret_from_fork+0x1f/0x40 > [110351.673789] [<ffffffff992a3ee0>] ? kthread_create_on_node+0x1e0/0x1e0 > [110351.683488] Code: ff 0f 87 d3 06 00 00 48 8b 8d d8 fc ff ff 48 39 8d f0 fc ff ff 0f 84 1c 05 00 00 4d 85 db 0f 84 b4 04 00 00 48 8b 85 b0 fc ff ff <4c> 3b 18 0f 85 ad 03 00 00 0f b6 85 03 fd ff ff 48 8d 95 03 fd > [110351.727548] RIP [<ffffffffc0638c89>] p_cmp_bytes+0x239/0x940 [p_lkrg] > [110351.729925] RSP <ffff9d7a69cd7a10> > [110351.731103] CR2: 0000000000000000 > > > > On Nov 12, 2018, at 4:27 PM, Solar Designer <solar@...nwall.com> wrote: > > > > Hi, > > > > We'd like to announce Linux Kernel Runtime Guard (LKRG) version 0.5: > > > > https://www.openwall.com/lkrg/ > > > > The following changes have been made between LKRG 0.4 and 0.5: > > > > *) [CI] Add *_JUMP_LABEL support for kernel modules (a major change) > > *) [CI] Add support for "cold" function versions generated by new GCC - > > necessary to correctly handle *_JUMP_LABEL > > *) [CI] Change output message format when *_JUMP_LABEL was detected for kernel > > module's .text section > > *) [CI] Add new sysctl interface - optional panic() on CI verification failure > > *) [ED] Hook generic_permission() instead of may_open() > > *) [ED] Hook and correctly handle override_creds() / revert_creds() > > *) Add Mikhail Klementev's patches for Makefile, .gitignore and missing include > > > > Legend: > > [CI] - Code Integrity > > [ED] - Exploit Detection > > > > Like before, this release is mostly due to work by Adam 'pi3' Zabrocki. > > > > Alexander > -- pi3 (pi3ki31ny) - pi3 (at) itsec pl http://pi3.com.pl
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.