Re: should module_load be checked on a kernel module object?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/10/2016 07:56 PM, Dominick Grift wrote:
> On 10/10/2016 07:50 PM, Jeffrey Vander Stoep wrote:
>> On Mon, Oct 10, 2016 at 10:21 AM Dominick Grift <dac.override@xxxxxxxxx>
>> wrote:
>>
>>> On 10/10/2016 07:16 PM, Jeffrey Vander Stoep wrote:
>>>> No problem. We went through a number of iterations on this patch
>>>> because of how confusing the target object for init_module is.
>>>>
>>>> On Android we neverallow use of init_module. Forcing userspace to use
>>>> finit_module allows us to enforce restrictions on kernel module
>>>> origin. We only allow module loading from verified-boot protected
>>>> partitions.
>>>>
>>>> https://android-review.googlesource.com/#/c/214021/
>>>>
>>>
>>> That is a nice approach. After you reminded me, i started looking at my
>>> policy and i actually commented it (i rarely comment in my policy):
>>>
>>>                 ; for compatibility with Linux =< 4.6
>>>                 (allow sys.load_kernel_module_subj_type_attribute self
>>> (system (module_load))))))
>>>
>>> So i suppose if i want to support Linux 4.6 then i might not have the
>>> option to neverallow it.
>>>
>>>
>> You shouldn't need this for compatibility. For kernel version <= 4.6, the
>> kernel hook for selinux_kernel_read_file is unused so no policy is needed,
>> it will already be allowed (or rather, not checked).
>>
>> The issue is that modprobe uses init_module() to load a kernel module. That
>> would need to be updated to use finit_module() in order to disallow
>> init_module().
>>
>> modprobe could be updated to behave more like insmod which defaults to
>> using finit_module and falls back to init_module for old kernels.
>> https://android.googlesource.com/platform/external/toybox/+/android-7.0.0_r14/toys/other/insmod.c#37
>>
>> I don't know what kind of control you have over kernels, but if you want a
>> stable backport of the module_load patch, we backported to 4.4, 4,1, 3.18,
>> 3.14, and 3.10:
>> https://android-review.googlesource.com/#/q/61d612ea731e57dc510472fb746b55cdc017f371+owner:jeffv
>>
> 
> Thank you. All is clear now. I will rephrase my comment and next time
> look before asking because, even though the comment is inaccurate it,
> together with the av allow rule still clearly indicated that this event
> was to be expected (simply because in GNU/Linux some components use
> init_module() and dont fall back to finit_module()
> 

After some deliberation i decided to conditionally support init_module()

It seems finit_module() requires that kernel modules aren't compressed.
Distributions compress kernel modules to save valuable space, and thus
even though kmod tries to use finit_module() by default it falls back to
init_module() since the modules are compressed.

By conditionally supporting init_module() one can make it work by
default but give one the opportunity to enable finit_module by
decompressing kernel modules and by toggling the boolean that allows
init_module() to false.


https://github.com/DefenSec/dssp/commit/12994152cce90a5cfecd7dbbc2ffb1c1d524ad98

https://github.com/DefenSec/dssp/commit/7f31dffeb2af83a23d2f47dd7cfbf6f406a5d243
-- 
Key fingerprint = 5F4D 3CDB D3F8 3652 FBD8  02D5 3B6C 5F1D 2C7B 6B02
https://sks-keyservers.net/pks/lookup?op=get&search=0x3B6C5F1D2C7B6B02
Dominick Grift

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Selinux mailing list
Selinux@xxxxxxxxxxxxx
To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx.
To get help, send an email containing "help" to Selinux-request@xxxxxxxxxxxxx.

[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux