cizzi wrote:I will launching a free linux shell service to the public and do
not want to go online without proper security.
cizzi wrote:Can you guys suggest alternatives to gr security or links or books, anything
that will secure my debian system against hackers.
spender wrote:RSBAC or SELinux won't provide more security for a shell server than grsecurity.
At least grsecurity includes PaX
which provides protection against specific bug classes and exploitation
methods in the kernel.
spender wrote:A quick real-life example of how SELinux's "protection" is inferior
...or that was a false dichotomy and you are wrong . i suggest you actually read the linked topic and look for my statement on specific vs. generic protections (hint: it's possible/not possible, respectively) and notice which word i highlighted above in spender's quote.Alexei.Sheplyakov wrote:Either you or PaX team must be wrong, see viewtopic.php?p=6791spender wrote:which provides protection against specific bug classes and exploitation methods in the kernel.
some archs such as sparc/sparc64 have natural userland/kernel separation, so they already have UDEREF and they don't need any code in PaX per se. also i'm spilling some beans here, but i've been working on UDEREF for amd64, we'll see how well it goes.> SELinux now ships with a weaker form of "protection" against null ptr
> dereference bugs (unlike the generic invalid userland access class PaX
> protects against)
AFAIK, uderef is ia-32 only. I wouldn't call that "generic".
if you know of security bugs that we've fixed silently, raise your voice! don't just throw out empty accusations.> which was able to be bypassed by at least two separate methods that
> the PaX team and myself discovered back in May of last year, which
> were just recently fixed with no CVE from Redhat.
Sadly, grsecurity is even worse. Bugs get fixed with no CVEs, no ChangeLogs, no announcements.
because they're test patches and not releases? as for the generic wisdom of PGP signatures (and it's only my opinion, not necessarily spender's), what do they help you? nothing except giving you a false sense of security (this is not grsec specific of course, goes for all PGP signatures that people blindly put their faith in).Even no PGP signatures of those "test patches".
that was a bug in PaX, not grsecurity. try to compare apples to oranges next time . and speaking of no kernel bugs in SELinux, care you enlighten the folks at securityfocus that the following apparently doesn't exist: http://www.securityfocus.com/bid/17830, at least according to you .Alexei.Sheplyakov wrote:spender wrote:A quick real-life example of how SELinux's "protection" is inferior
viewtopic.php?t=1813
At least, SELinux does not introduce new kernel bugs.
PaX Team wrote:if you know of security bugs that we've fixed silently, raise your voice! don't just throw out empty accusations.
PaX Team wrote:if you know of security bugs that we've fixed silently, raise your voice!
don't just throw out empty accusations.
[ 136.044821] Unable to handle kernel NULL pointer dereference at 00000000000000b0 RIP:
[ 136.044826] [<ffffffff8026f23e>] __vm_enough_memory+0x6e/0x130
[ 136.044833] PGD 69d0d067 PUD 69d0e067 PMD 0
[ 136.044836] Oops: 0000 [1] SMP
[ 136.044838] CPU 1
[ 136.044839] Modules linked in: cpufreq_powersave cpufreq_conservative powernow_k8 freq_table tun ipt_MASQUERADE iptable_nat
nf_nat ipt_REJECT ipt_LOG xt_limit ipt_iprange xt_tcpudp nf_conntrack_ipv4 xt_state nf_conntrack nfnetlink xt_multiport iptable
_filter ip_tables x_tables ext2 mbcache reiserfs fuse snd_pcm_oss snd_mixer_oss snd_hda_intel i2c_piix4 k8temp hwmon snd_pcm sn
d_timer button i2c_core floppy pcspkr tsdev snd soundcore snd_page_alloc rtc mousedev evdev xfs dm_mirror dm_snapshot dm_mod id
e_generic usbhid hid ide_cd cdrom sd_mod atiixp generic ide_core ata_generic ahci libata scsi_mod ohci1394 ieee1394 ehci_hcd oh
ci_hcd usbcore thermal processor fan unix skge
[ 136.044871] Pid: 4493, comm: khelper Not tainted 2.6.23.14-grsec-k8-smp #1
[ 136.044873] RIP: 0010:[<ffffffff8026f23e>] [<ffffffff8026f23e>] __vm_enough_memory+0x6e/0x130
[ 136.044876] RSP: 0000:ffff810058a15bf0 EFLAGS: 00010216
[ 136.044878] RAX: 00000000002b3df4 RBX: 0000000000000001 RCX: 000000000007ee5a
[ 136.044879] RDX: 00000000000fb970 RSI: 0000000000000001 RDI: 0000000000000004
[ 136.044881] RBP: 0000000000000001 R08: ffff81007e6097c0 R09: 0000000000000001
[ 136.044883] R10: 0000000000055029 R11: 0000000000000001 R12: 0000000000000000
[ 136.044884] R13: 0000000000000001 R14: ffff810065e0f978 R15: ffff810065cf9200
[ 136.044886] FS: 000039df3e48cd20(0000) GS:ffff8100379c4dc0(0000) knlGS:00000000ec8a98c0
[ 136.044888] CS: 0010 DS: 0018 ES: 0018 CR0: 000000008005003b
[ 136.044890] CR2: 00000000000000b0 CR3: 0000000069d0c000 CR4: 00000000000006e0
[ 136.044891] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 136.044893] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[ 136.044895] Process khelper (pid: 4493, threadinfo ffff810058a14000, task ffff81007e6097c0)
[ 136.044896] Stack: ffff81007e3c7e40 ffff81007f2e7800 0000000000002000 ffffffff8026d2d9
[ 136.044900] ffff810065e0f978 00007fffffffd000 0000000000000001 0000000000001000
[ 136.044902] 0000000000000002 ffffffff8026d5ac ffff810065cf9200 00007fffffffdfe6
[ 136.044904] Call Trace:
[ 136.044910] [<ffffffff8026d2d9>] acct_stack_growth+0xe9/0x140
[ 136.044914] [<ffffffff8026d5ac>] expand_stack_downwards+0x8c/0xa0
[ 136.044919] [<ffffffff80283a48>] get_arg_page+0x28/0xd0
[ 136.044923] [<ffffffff80283d00>] copy_strings+0x100/0x1e0
[ 136.044929] [<ffffffff802856b9>] do_execve+0x1e9/0x3d0
[ 136.044933] [<ffffffff803f907a>] __sched_text_start+0x11a/0x1ef
[ 136.044939] [<ffffffff8022bf25>] try_to_wake_up+0x65/0x370
[ 136.044943] [<ffffffff8025fd73>] __pagevec_free+0x23/0x30
[ 136.044947] [<ffffffff8022db7c>] __cond_resched+0x1c/0x50
[ 136.044950] [<ffffffff803f9792>] cond_resched+0x32/0x40
[ 136.044953] [<ffffffff803074f0>] __strncpy_from_user+0x20/0x60
[ 136.044959] [<ffffffff8020ada4>] sys_execve+0x44/0xb0
[ 136.044963] [<ffffffff8020cfd4>] kernel_execve+0x64/0xd0
[ 136.044973] [<ffffffff802426eb>] ____call_usermodehelper+0x16b/0x180
[ 136.044976] [<ffffffff8020cf68>] child_rip+0xa/0x12
[ 136.044983] [<ffffffff80242580>] ____call_usermodehelper+0x0/0x180
[ 136.044988]
[ 136.044988]
[ 136.044989] Code: 49 8b 84 24 b0 00 00 00 48 63 15 67 ef 2d 00 48 c1 e8 05 48
[ 136.044995] RIP [<ffffffff8026f23e>] __vm_enough_memory+0x6e/0x130
[ 136.044998] RSP <ffff810058a15bf0>
[ 136.044999] CR2: 00000000000000b0
PaX Team wrote:as for the generic wisdom of PGP signatures (and it's only my opinion,
not necessarily spender's), what do they help you?
PaX Team wrote:Alexei.Sheplyakov wrote:At least, SELinux does not introduce new kernel bugs.
that was a bug in PaX, not grsecurity. try to compare apples
to oranges next time .
PaX Team wrote:and speaking of no kernel bugs in SELinux, care you enlighten
the folks at securityfocus that the following apparently doesn't
exist: http://www.securityfocus.com/bid/17830,
Unfortunately, I don't know of any systematic way to reproduce this.
Apparently, the bug was fixed(?) in grsecurity-2.1.11-2.6.23.14-200801231800.
[ 146.408997] Unable to handle kernel NULL pointer dereference at 00000000000000b0 RIP:
[ 146.409002] [<ffffffff8026f23e>] __vm_enough_memory+0x6e/0x130
[ 146.409007] PGD 66990067 PUD 6698b067 PMD 0
[ 146.409010] Oops: 0000 [1] SMP
[ 146.409012] CPU 0
[ 146.409013] Modules linked in: cpufreq_powersave cpufreq_conservative powernow_k8 freq_table tun ipt_MASQUERADE iptable_nat nf_nat ipt_REJECT ipt_LOG xt_limit ipt_iprange xt_tcpudp nf_conntrack_ipv4 xt_state nf_conntrack nfnetlink xt_multiport iptable_filter ip_tables x_tables ext2 mbcache reiserfs fuse snd_pcm_oss snd_mixer_oss k8temp hwmon button snd_hda_intel i2c_piix4 i2c_core floppy rtc snd_pcm snd_timer snd soundcore snd_page_alloc pcspkr tsdev mousedev evdev xfs dm_mirror dm_snapshot dm_mod ide_generic ide_cd cdrom atiixp usbhid hid generic ide_core sd_mod ohci1394 ieee1394 ehci_hcd ohci_hcd usbcore ata_generic ahci libata scsi_mod thermal processor fan unix skge
[ 146.409043] Pid: 4459, comm: khelper Not tainted 2.6.23.14-grsec-200801231800-k8-smp #1
[ 146.409045] RIP: 0010:[<ffffffff8026f23e>] [<ffffffff8026f23e>] __vm_enough_memory+0x6e/0x130
[ 146.409048] RSP: 0018:ffff810058947bf0 EFLAGS: 00010216
[ 146.409050] RAX: 00000000002b3df4 RBX: 0000000000000001 RCX: 000000000007ee5a
[ 146.409051] RDX: 00000000000fb970 RSI: 0000000000000001 RDI: 0000000000000004
[ 146.409053] RBP: 0000000000000001 R08: ffff81005c770800 R09: 0000000000000001
[ 146.409055] R10: 00000000000552be R11: 0000000000000001 R12: 0000000000000000
[ 146.409056] R13: 0000000000000001 R14: ffff81005fdc1348 R15: ffff810037e53800
[ 146.409058] FS: 00003a32d53e0d20(0000) GS:ffffffff804cc000(0000) knlGS:00000000ddc158c0
[ 146.409060] CS: 0010 DS: 0018 ES: 0018 CR0: 000000008005003b
[ 146.409062] CR2: 00000000000000b0 CR3: 000000006698c000 CR4: 00000000000006e0
[ 146.409064] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 146.409065] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[ 146.409067] Process khelper (pid: 4459, threadinfo ffff810058946000, task ffff81005c770800)
[ 146.409069] Stack: ffff810058906e00 ffff810060e2a780 0000000000002000 ffffffff8026d2d9
[ 146.409072] ffff81005fdc1348 00007fffffffd000 0000000000000001 0000000000001000
[ 146.409074] 0000000000000000 ffffffff8026d5ac ffff810037e53800 00007fffffffdff5
[ 146.409077] Call Trace:
[ 146.409081] [<ffffffff8026d2d9>] acct_stack_growth+0xe9/0x140
[ 146.409085] [<ffffffff8026d5ac>] expand_stack_downwards+0x8c/0xa0
[ 146.409089] [<ffffffff80283a48>] get_arg_page+0x28/0xd0
[ 146.409093] [<ffffffff80283d00>] copy_strings+0x100/0x1e0
[ 146.409098] [<ffffffff802856d8>] do_execve+0x208/0x3d0
[ 146.409107] [<ffffffff8022db7c>] __cond_resched+0x1c/0x50
[ 146.409110] [<ffffffff803f9792>] cond_resched+0x32/0x40
[ 146.409114] [<ffffffff803074f0>] __strncpy_from_user+0x20/0x60
[ 146.409119] [<ffffffff8020ada4>] sys_execve+0x44/0xb0
[ 146.409122] [<ffffffff8020cfd4>] kernel_execve+0x64/0xd0
[ 146.409131] [<ffffffff802426eb>] ____call_usermodehelper+0x16b/0x180
[ 146.409134] [<ffffffff8020cf68>] child_rip+0xa/0x12
[ 146.409140] [<ffffffff80242580>] ____call_usermodehelper+0x0/0x180
[ 146.409142] [<ffffffff8020cf5e>] child_rip+0x0/0x12
[ 146.409144]
[ 146.409145]
[ 146.409145] Code: 49 8b 84 24 b0 00 00 00 48 63 15 67 ef 2d 00 48 c1 e8 05 48
[ 146.409151] RIP [<ffffffff8026f23e>] __vm_enough_memory+0x6e/0x130
[ 146.409153] RSP <ffff810058947bf0>
[ 146.409155] CR2: 00000000000000b0
Alexei.Sheplyakov wrote:
- Code: Select all
[ 146.408997] Unable to handle kernel NULL pointer dereference at 00000000000000b0 RIP:
[ 146.409002] [<ffffffff8026f23e>] __vm_enough_memory+0x6e/0x130
$ grep -e '\<__vm_enough_memory\>' /boot/System.map-2.6.23.14-grsec-200801231800-k8-smp | sed -e 's/^\([^ \t]\+\).*$/0x\1/'
0xffffffff8026f1d0
$ gdb --silent /boot/vmlinux-2.6.23.14-grsec-200801231800-k8-smp
(no debugging symbols found)
Using host libthread_db library "/lib/libthread_db.so.1".
disassemble 0xffffffff8026f1d0
Dump of assembler code for function __vm_enough_memory:
0xffffffff8026f1d0 <__vm_enough_memory+0>: sub $0x18,%rsp
0xffffffff8026f1d4 <__vm_enough_memory+4>: mov %r12,0x10(%rsp)
0xffffffff8026f1d9 <__vm_enough_memory+9>: mov %rdi,%r12
0xffffffff8026f1dc <__vm_enough_memory+12>: mov %rsi,%rdi
0xffffffff8026f1df <__vm_enough_memory+15>: mov %rbx,(%rsp)
0xffffffff8026f1e3 <__vm_enough_memory+19>: mov %rbp,0x8(%rsp)
0xffffffff8026f1e8 <__vm_enough_memory+24>: mov %rsi,%rbx
0xffffffff8026f1eb <__vm_enough_memory+27>: mov %edx,%ebp
0xffffffff8026f1ed <__vm_enough_memory+29>: callq 0xffffffff802626d0 <vm_acct_memory>
0xffffffff8026f1f2 <__vm_enough_memory+34>: mov 3010488(%rip),%eax # 0xffffffff8054e1b0 <sysctl_overcommit_memory>
0xffffffff8026f1f8 <__vm_enough_memory+40>: cmp $0x1,%eax
0xffffffff8026f1fb <__vm_enough_memory+43>: je 0xffffffff8026f2f2 <__vm_enough_memory+290>
0xffffffff8026f201 <__vm_enough_memory+49>: test %eax,%eax
0xffffffff8026f203 <__vm_enough_memory+51>: je 0xffffffff8026f280 <__vm_enough_memory+176>
0xffffffff8026f205 <__vm_enough_memory+53>: movslq 2327316(%rip),%rax # 0xffffffff804a7520 <sysctl_overcommit_ratio>
0xffffffff8026f20c <__vm_enough_memory+60>: mov $0x28f5c28f5c28f5c3,%rdx
0xffffffff8026f216 <__vm_enough_memory+70>: imul 2561106(%rip),%rax # 0xffffffff804e0670 <totalram_pages>
0xffffffff8026f21e <__vm_enough_memory+78>: shr $0x2,%rax
0xffffffff8026f222 <__vm_enough_memory+82>: mul %rdx
0xffffffff8026f225 <__vm_enough_memory+85>: mov %rdx,%rcx
0xffffffff8026f228 <__vm_enough_memory+88>: shr $0x2,%rcx
0xffffffff8026f22c <__vm_enough_memory+92>: test %ebp,%ebp
0xffffffff8026f22e <__vm_enough_memory+94>: jne 0xffffffff8026f237 <__vm_enough_memory+103>
0xffffffff8026f230 <__vm_enough_memory+96>: shr $0x7,%rdx
0xffffffff8026f234 <__vm_enough_memory+100>: sub %rdx,%rcx
0xffffffff8026f237 <__vm_enough_memory+103>: add 3010530(%rip),%rcx # 0xffffffff8054e220 <total_swap_pages>
0xffffffff8026f23e <__vm_enough_memory+110>: mov 0xb0(%r12),%rax
^^^^^^^^^^ HERE
0xffffffff8026f246 <__vm_enough_memory+118>: movslq 3010407(%rip),%rdx # 0xffffffff8054e1b4 <vm_committed_space>
0xffffffff8026f24d <__vm_enough_memory+125>: shr $0x5,%rax
0xffffffff8026f251 <__vm_enough_memory+129>: sub %rax,%rcx
0xffffffff8026f254 <__vm_enough_memory+132>: cmp %rcx,%rdx
0xffffffff8026f257 <__vm_enough_memory+135>: jl 0xffffffff8026f2f2 <__vm_enough_memory+290>
0xffffffff8026f25d <__vm_enough_memory+141>: neg %rbx
0xffffffff8026f260 <__vm_enough_memory+144>: mov %rbx,%rdi
0xffffffff8026f263 <__vm_enough_memory+147>: callq 0xffffffff802626d0 <vm_acct_memory>
0xffffffff8026f268 <__vm_enough_memory+152>: mov $0xfffffff4,%eax
0xffffffff8026f26d <__vm_enough_memory+157>: mov (%rsp),%rbx
0xffffffff8026f271 <__vm_enough_memory+161>: mov 0x8(%rsp),%rbp
0xffffffff8026f276 <__vm_enough_memory+166>: mov 0x10(%rsp),%r12
0xffffffff8026f27b <__vm_enough_memory+171>: add $0x18,%rsp
0xffffffff8026f27f <__vm_enough_memory+175>: retq
0xffffffff8026f280 <__vm_enough_memory+176>: mov 3010241(%rip),%rax # 0xffffffff8054e148 <vm_stat+40>
0xffffffff8026f287 <__vm_enough_memory+183>: xor %ecx,%ecx
0xffffffff8026f289 <__vm_enough_memory+185>: mov 3010256(%rip),%rdx # 0xffffffff8054e160 <vm_stat+64>
0xffffffff8026f290 <__vm_enough_memory+192>: test %rax,%rax
0xffffffff8026f293 <__vm_enough_memory+195>: cmovs %rcx,%rax
0xffffffff8026f297 <__vm_enough_memory+199>: add 3010026(%rip),%rax # 0xffffffff8054e088 <nr_swap_pages>
0xffffffff8026f29e <__vm_enough_memory+206>: test %rdx,%rdx
0xffffffff8026f2a1 <__vm_enough_memory+209>: cmovns %rdx,%rcx
0xffffffff8026f2a5 <__vm_enough_memory+213>: test %ebp,%ebp
0xffffffff8026f2a7 <__vm_enough_memory+215>: lea (%rax,%rcx,1),%rdx
0xffffffff8026f2ab <__vm_enough_memory+219>: jne 0xffffffff8026f2b7 <__vm_enough_memory+231>
0xffffffff8026f2ad <__vm_enough_memory+221>: mov %rdx,%rax
0xffffffff8026f2b0 <__vm_enough_memory+224>: shr $0x5,%rax
0xffffffff8026f2b4 <__vm_enough_memory+228>: sub %rax,%rdx
0xffffffff8026f2b7 <__vm_enough_memory+231>: cmp %rbx,%rdx
0xffffffff8026f2ba <__vm_enough_memory+234>: ja 0xffffffff8026f2f2 <__vm_enough_memory+290>
0xffffffff8026f2bc <__vm_enough_memory+236>: mov 3010141(%rip),%rax # 0xffffffff8054e120 <vm_stat>
0xffffffff8026f2c3 <__vm_enough_memory+243>: test %rax,%rax
0xffffffff8026f2c6 <__vm_enough_memory+246>: js 0xffffffff8026f25d <__vm_enough_memory+141>
0xffffffff8026f2c8 <__vm_enough_memory+248>: mov 2560937(%rip),%rcx # 0xffffffff804e0678 <totalreserve_pages>
0xffffffff8026f2cf <__vm_enough_memory+255>: cmp %rcx,%rax
0xffffffff8026f2d2 <__vm_enough_memory+258>: jbe 0xffffffff8026f25d <__vm_enough_memory+141>
0xffffffff8026f2d4 <__vm_enough_memory+260>: sub %rcx,%rax
0xffffffff8026f2d7 <__vm_enough_memory+263>: test %ebp,%ebp
0xffffffff8026f2d9 <__vm_enough_memory+265>: mov %rax,%rcx
0xffffffff8026f2dc <__vm_enough_memory+268>: jne 0xffffffff8026f2e5 <__vm_enough_memory+277>
0xffffffff8026f2de <__vm_enough_memory+270>: shr $0x5,%rax
0xffffffff8026f2e2 <__vm_enough_memory+274>: sub %rax,%rcx
0xffffffff8026f2e5 <__vm_enough_memory+277>: lea (%rdx,%rcx,1),%rax
0xffffffff8026f2e9 <__vm_enough_memory+281>: cmp %rax,%rbx
0xffffffff8026f2ec <__vm_enough_memory+284>: jae 0xffffffff8026f25d <__vm_enough_memory+141>
0xffffffff8026f2f2 <__vm_enough_memory+290>: xor %eax,%eax
0xffffffff8026f2f4 <__vm_enough_memory+292>: jmpq 0xffffffff8026f26d <__vm_enough_memory+157>
0xffffffff8026f2f9 <__vm_enough_memory+297>: data16
0xffffffff8026f2fa <__vm_enough_memory+298>: data16
0xffffffff8026f2fb <__vm_enough_memory+299>: data16
0xffffffff8026f2fc <__vm_enough_memory+300>: nop
0xffffffff8026f2fd <__vm_enough_memory+301>: data16
0xffffffff8026f2fe <__vm_enough_memory+302>: data16
0xffffffff8026f2ff <__vm_enough_memory+303>: nop
177 allowed = (totalram_pages - hugetlb_total_pages())
178 * sysctl_overcommit_ratio / 100;
179 /*
180 * Leave the last 3% for root
181 */
182 if (!cap_sys_admin)
183 allowed -= allowed / 32;
184 allowed += total_swap_pages;
185
186 /* Don't let a single process grow too big:
187 leave 3% of the size of this process for other processes */
188 allowed -= mm->total_vm / 32;
we're talking about security bugs, not bugs in general. in my judgement it wasn't a security bug but feel free to prove me wrong.Oscon wrote:Maybe, a very small , local, "strange" bug :
but "silently fixed bug"...
it was a test patch, not a release so no changelog. besides, due to the way 2.6 is developed and we can track it, we're surely not going to announce every silly bug we come across (interdiff is your friend), be that in our code or in linux itself. FYI, i think a good chunk of PaX, possibly up to one half of it, is now such bugfix/feature reversal/rework/cleanup/etc.2.1.11 contains the patch for this problem. But changelog or other information, I don't found.
i'm glad you figured out it wasn't fixed silently, given that this was the first time we'd heard from you about this bug . so you'll probably forgive me for not providing the CVE but all is not lost, you can still make history. here's how: you carefully read the explanation below then go through the proper bug reporting process both saving me time and earning yourself that much coveted CVE. deal?Alexei.Sheplyakov wrote:This seems to be PaX related, as it never(?) happens with vanilla 2.6.23.14
kernel (and several times a day with patched one). Unfortunately, I don't
know of any systematic way to reproduce this. Apparently, the bug was fixed(?)
in grsecurity-2.1.11-2.6.23.14-200801231800. Where can I find CVE/ChangeLog?
see my response to Oscon.Likewise, those two bugs I've reported previously were never announced.
you don't need PGP signatures for this then, SSL would be enough (except it'd cost money for us, so good luck convincing spender). also, every other means of compromising the software delivery foodchain is acceptable risk for you then?They give me a (small) chance to detect some bad things (e.g. somebody rooted the proxy I use, or something like that).