[OpenWrt-Devel] [PATCH 0/6] buildsystem: Activate PIE ASLR for some packages
Rosen Penev
rosenp at gmail.com
Wed Jan 8 19:49:17 EST 2020
> On Jan 8, 2020, at 3:10 PM, Hauke Mehrtens <hauke at hauke-m.de> wrote:
>
> On 1/8/20 7:24 AM, Petr Štetiar wrote:
>> Hauke Mehrtens <hauke at hauke-m.de> [2020-01-07 23:21:19]:
>>
>> Hi,
>>
>> thanks for your work.
>>
>>>> Hauke Mehrtens (6):
>>>> buildsystem: Make PIE ASLR option tristate
>>>> dnsmasq: Activate PIE by default
>>>> dropbear: Activate PIE by default
>>>> hostapd: Activate PIE by default
>>>> uhttpd: Activate PIE by default
>>>> lantiq: Allow PKG_ASLR_PIE for DSL and voice drivers
>>
>> just wondering, if there is any particular reason for leaving odhcp6c and
>> odhcpd out as this are network exposed services and running in default
>> install.
>
> I just didn't thought about them. We could just add an extra patch to
> activate it for them too.
>
>> Thinking about it now, we should probably consider ubus, procd, rpcd and
>> cgi-io (perhaps missed something) which might possibly process malicious
>> inputs as well.
>
> Then we have more or less everything. ;-)
>
>> BTW I'm wondering how does this work with the shared libraries, like musl
>> libc, openssl, libubox? Don't they need PKG_ASLR_PIE_REGULAR enabled as well
>> in order to get `TARGET_LDFLAGS += $(FPIC)
>> -specs=$(INCLUDE_DIR)/hardened-ld-pie.specs` ?
>
> Shared libraries are always linked position independent and then the
> kernel is already loading them to random address offsets.
>
>>> I would like to apply these patches to master?
>>
>> I don't know if you've something newer in your tree, just looked at your aslr
>> branch in your staging tree:
>
> You can find the newest version here:
> https://git.openwrt.org/?p=openwrt/staging/hauke.git;a=shortlog;h=refs/heads/aslr
>
>> + default PKG_ASLR_PIE_NONE if ((SMALL_FLASH || LOW_MEMORY_FOOTPRINT) && !SDK)
>>
>> Nice, that you've enabled this for !SMALL_FLASH devices. BTW what is the
>> reason for !SDK? That way binary/library.
>
> When something is build in the SDK I always want to use
> PKG_ASLR_PIE_REGULAR by default. In our build infrastructure we build
> packages common to multiple targets in the SDK and there I always want
> to use PKG_ASLR_PIE_REGULAR as default option to activate ASLR when the
> same package is used on a tiny and a normal target. I hope it will work
> like this. I want to prevent that some tiny target is used to build the
> additional packages and then this gets accidentally deactivated.
>
>>> Are there any objections to this? I already activated LTO to reduce the
>>> size for all these components and the lantiq patch is already applied.
>>
>> I don't have any objections, I welcome this additional hardening. Which branch
>> can I use for runtime testing? I plan to test it and give you my Acked-by.
>
> The disadvantage is that the size increases, otherwise I would activate
> it for all binaries.
>
> This is one example for dropbear:
> ------------------------------------------------------------------------
> root at OpenWrt:/# cat /proc/1200/maps
> 5561e000-5564d000 r-xp 00000000 fe:00 1024 /usr/sbin/dropbear
> 5565d000-5565e000 r-xp 0002f000 fe:00 1024 /usr/sbin/dropbear
> 5565e000-5565f000 rwxp 00030000 fe:00 1024 /usr/sbin/dropbear
> 77e89000-77eab000 r-xp 00000000 fe:00 288 /lib/libgcc_s.so.1
> 77eab000-77eac000 r-xp 00012000 fe:00 288 /lib/libgcc_s.so.1
> 77eac000-77ead000 rwxp 00013000 fe:00 288 /lib/libgcc_s.so.1
> 77ead000-77f44000 r-xp 00000000 fe:00 286 /lib/libc.so
> 77f53000-77f55000 rwxp 00096000 fe:00 286 /lib/libc.so
> 77f55000-77f57000 rwxp 00000000 00:00 0
> 7fc95000-7fcb6000 rw-p 00000000 00:00 0 [stack]
> 7fefc000-7fefd000 r-xp 00000000 00:00 0
> 7ff70000-7ff72000 r--p 00000000 00:00 0 [vvar]
> 7ff72000-7ff73000 r-xp 00000000 00:00 0 [vdso]
> root at OpenWrt:/# /etc/init.d/dropbear restart
> root at OpenWrt:/# ps |grep dropbear
> 2299 root 1108 S /usr/sbin/dropbear -F -P
> /var/run/dropbear.1.pid -p
> 2315 root 1212 S grep dropbear
> root at OpenWrt:/# cat /proc/2299/maps
> 55557000-55586000 r-xp 00000000 fe:00 1024 /usr/sbin/dropbear
> 55596000-55597000 r-xp 0002f000 fe:00 1024 /usr/sbin/dropbear
> 55597000-55598000 rwxp 00030000 fe:00 1024 /usr/sbin/dropbear
> 77f12000-77f34000 r-xp 00000000 fe:00 288 /lib/libgcc_s.so.1
> 77f34000-77f35000 r-xp 00012000 fe:00 288 /lib/libgcc_s.so.1
> 77f35000-77f36000 rwxp 00013000 fe:00 288 /lib/libgcc_s.so.1
> 77f36000-77fcd000 r-xp 00000000 fe:00 286 /lib/libc.so
> 77fdc000-77fde000 rwxp 00096000 fe:00 286 /lib/libc.so
> 77fde000-77fe0000 rwxp 00000000 00:00 0
> 7fcbc000-7fcdd000 rw-p 00000000 00:00 0 [stack]
> 7fefc000-7fefd000 r-xp 00000000 00:00 0
> 7ff73000-7ff75000 r--p 00000000 00:00 0 [vvar]
> 7ff75000-7ff76000 r-xp 00000000 00:00 0 [vdso]
> root at OpenWrt:/#
> ------------------------------------------------------------------------
>
> All sections are loaded to different addresses the second time, except
> 7fefc000 ;-)
Yousong has a patch that gets rid of that. What happened to it?
>
> Hauke
>
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list