Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundację Dzieciom „Zdążyć z Pomocą”.
Więcej informacji na dug.net.pl/pomagamy/.

#1 2019-01-03 23:21:24

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Budowanie kernela linux dla konkretnej maszyny z Debianem

Ostatnich parę dni spędziłem na zabawach dotyczących budowania Debianowego kernela, z tą różnicą, że przeznaczonego na konkretną maszynę. Wyszedł z tego taki artykuł.

Generalnie to byłby on znacznie krótszy, gdyby nie pomoc jednego osobnika, który raczej chciałby zostać anonimowy ale wszyscy wiemy, że chodzi o Jacekalex'a, i jego pomysł wdrożenia kompilacji kernela gentoo-like na Debianie, co przyniosło bardzo dziwne efekty. xD

Jeśli ktoś ma jakieś doświadczenia w budowaniu tego typu kernela, czy ogólnie kernela i włada info, które nie zostało zawarte w podlinkowanym arcie lub też kłóci się ono z tym co tam zostało napisane, to niech swoje spostrzeżenia zostawi tutaj. xD

Offline

 

#2 2019-01-04 08:40:36

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Budowanie kernela linux dla konkretnej maszyny z Debianem

Zapomniałeś o kilku fladze kompilatora:

Kod:

Wformat-security

która wciąga szereg innych mechanizmów bezpieczeństwa.

Przykład z Firefoxem:

about:buildconfig napisał(-a):

Compiler     Version     Compiler flags
/usr/x86_64-pc-linux-gnu/gcc-bin/7.3.0/x86_64-pc-linux-gnu-gcc -std=gnu99     7.3.0    
-Wall -Wempty-body -Wignored-qualifiers -Wpointer-arith -Wsign-compare -Wtype-limits -Wunreachable-code -Wduplicated-cond -Wno-error=maybe-uninitialized -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=free-nonheap-object -Wformat -Wformat-security -Wformat-overflow=2 -march=native -pipe -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-aliasing -ffunction-sections -fdata-sections -fno-math-errno -pthread -pipe

/usr/x86_64-pc-linux-gnu/gcc-bin/7.3.0/x86_64-pc-linux-gnu-g++     7.3.0     -march=native -pipe -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -Wall -Wempty-body -Wignored-qualifiers -Woverloaded-virtual -Wpointer-arith -Wsign-compare -Wtype-limits -Wunreachable-code -Wwrite-strings -Wno-invalid-offsetof -Wc++1z-compat -Wduplicated-cond -Wimplicit-fallthrough -Wno-error=maybe-uninitialized -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=free-nonheap-object -Wformat -Wformat-security -Wformat-overflow=2 -fno-sized-deallocation -march=native -pipe -fno-delete-null-pointer-checks -fno-lifetime-dse -fno-schedule-insns -fno-schedule-insns2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-exceptions -fno-strict-aliasing -fno-rtti -ffunction-sections -fdata-sections -fno-exceptions -fno-math-errno -pthread -pipe -O2 -fomit-frame-pointer

Kod:

hardening-check /usr/lib64/firefox/firefox
/usr/lib64/firefox/firefox:
 Position Independent Executable: yes
 Stack protected: yes
 Fortify Source functions: yes
 Read-only relocations: yes
 Immediate binding: yes

W dokumentacji GCC musisz się jeszcze troszkę podszkolić.

Flagi SPP i PIE Format_security kompilator hardened w Gentoo ma włączone OTB.


W GCC-8 flaga Wformat-security powinna być włączona domyślnie we wszystkich Linuxach, ale widocznie w Debianie tego jeszcze nie zauważyli, nie pierwszy raz z resztą. xD


Poza tym kolejny brak doświadczenia:

https://morfikov.github.io/post/budowanie-kernela-linux-dla-konkretnej-maszyny-z-debianem/ napisał(-a):

Kod:

-rw-r--r--  1 root root  32M 2018-12-31 02:52:17 initrd.img-4.19.0-1-amd64
-rw-r--r--  1 root root 9.9M 2019-01-01 16:58:10 initrd.img-4.19.13-amd64-morficzny
-rw-r--r--  1 root root 5.0M 2018-12-30 10:04:03 vmlinuz-4.19.0-1-amd64
-rw-r--r--  1 root root 8.4M 2019-01-01 16:46:34 vmlinuz-4.19.13-amd64-morficzny

U mnie:

Kod:

ls -alh /boot/ | egrep "initrd|vmlinuz" |grep `uname -r`
-rw-------  1 root root 7,3M 01-04 00:49 vmlinuz-4.19.13-gn3-trace
-rw-------  1 root root 7,3M 01-03 23:45 vmlinuz-4.19.13-gn3-trace.old

U mnie jajo nie wymaga initrd i ma 7,3 mega, u Ciebie jajo ma 8,4 M i do tego initrd 9,9 M - razem przeszło 2 razy tyle co u mnie.

Jak się buduje jajo pod sprzęt, to tak, żeby podnosiło cały system bez initrd, a do initrd można dać co najwyżej tapetkę konsoli czy jakieś skrypty do (niepotrzebne skreślić)  Integrity, Selinuxa, Apparmora, Busyboxa, Cryptsetup, awaryjną konsolę (takich zabawek nie każdy potrzebuje), itp.

Pozdro

Ostatnio edytowany przez Jacekalex (2019-01-04 09:11:52)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3 2019-01-05 00:28:08

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Budowanie kernela linux dla konkretnej maszyny z Debianem

Jacekalex napisał(-a):

Zapomniałeś o kilku fladze kompilatora:

Kod:

Wformat-security

która wciąga szereg innych mechanizmów bezpieczeństwa.

Zgodnie z tym co jest w man gcc, to ta flaga odpowiada jedynie za dodatkowe drukowanie ostrzeżeń dotyczących bezpieczeństwa. Jak sobie prześledzisz log dpkg-buildflags, to tam jest flaga -Werror=format-security , która pociąga ten -Wformat-security i automatycznie przerabia go na błąd i przerywa kompilacje jak się pojawi. Także tam nie ma nic o tym, że te opcje logujące błędy czy ostrzeżenia pociągają jeszcze jakieś dodatkowe "mechanizmy bezpieczeństwa", więc skąd ty wziąłeś to info? xD

Co do obrazu kernela. Przede wszystkim jak już to operować na wartościach obrazów to lepiej używać tych nieskompresowanych, bo to one siedzą w RAM. Mój kernel ma 38M ale to ile kernel waży u ciebie czy u mnie jest bez większego znaczenia, bo twój sprzęt wymaga innych modułów, a mój innych i porównywanie rozmiaru kernela jest trochę bez sensu. Pewnie mam tam trochę rzeczy jeszcze do okrojenia ale to się zrobi później. xD

Jeśli zaś chodzi o obraz initramfs, to też zależy. Ja mam w nim szereg configów od LVM/LUKS oraz busybox. Część konfiguracji można by przenieść do kernel cmd i pewnie by dało radę się pozbyć całego obrazu. Problem w tym, że ja nie mam zamiaru tego robić. xD Już pominę fakt, że  mam zamiar zbroić sobie PID1 przy pomocy AA i bez obrazu initramfs się nie obejdzie. To co jednak jest bardzo użyteczne, to dopisanie do linijki kernela czegoś na wzór break=premount . I jak się to dopisze, to wtedy zostaje się zrzuconym do chroot, który powstał po załadowaniu się obrazu initramfs, a wtedy ja mam dostęp do narzędzi z busybox oraz szeregu rzeczy, które sobie wrzucę do obrazu initramfs. W ten sposób zwykle jestem w stanie dostać się do systemu bez potrzeby live cd/dvd/pendrive . Także, initramfs jest bardzo przydatny. xD

Offline

 

#4 2019-01-05 21:12:21

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Budowanie kernela linux dla konkretnej maszyny z Debianem

Kwestia podpisywania modułów DKMS też została została rozwiązana.

Offline

 

#5 2019-01-05 22:35:02

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Budowanie kernela linux dla konkretnej maszyny z Debianem

Żeby podpisać moduły kernela w systemie Linux-integrity bazującym na modułach IMA/EVM:

Najpierw trzeba sprawdzić, czy evmctl znajduje klucze szyfrujące i ma do nich dostęp:

Kod:

touch plik
evmctl sign --imasig plik
evmctl verify plik

Prawidłowy wynik trzeciego polecenia:

Kod:

Verification is OK

Jeżeli powyższy test nie wykazał żadnych problemów, można podpisywać moduły:

Kod:

for MODULE in `find /lib/modules/$(uname -r) -type f  -iname '*.ko'`;
 do evmctl sign --imasig $MODULE; 
evmctl verify $MODULE 2>/dev/null && 
echo "Moduł $MODULE podpisany prawidłowo" || echo "Modułu $MODULE  nie udało się podpisać!"; 
done;

Co to jest IMA/EVM?
https://sourceforge.net/p/linux-ima/wiki/Home/
https://wiki.gentoo.org/wiki/Integrity_Measurement_Architecture
https://wiki.gentoo.org/wiki/Extended_Verification_Module

Jak wygląda taki podpis?

Kod:

root ~> getfattr -d -m - /lib/modules/4.19.13-gt5/kernel/net/netfilter/nft_tunnel.ko
getfattr: Usunięcie wiodącego '/' ze ścieżek bezwzględnych
# file: lib/modules/4.19.13-gt5/kernel/net/netfilter/nft_tunnel.ko
security.evm=0sAwICOIEa+gIAb36Of9qWTBzQnj5A844iWKmXNXAdBmOT2P9b4qRtqIvB27iiM5Y+EQcllijqmQQxKOzBIH6BtSglj0zotVIMhP7w5dg2DrVq/AYNBJVHMOrCWeaajQ+0MQqrkvzmwJnWtBS5/+FvWQGR/OfjSXBLMafdR2JVEvSBkIgnGVfzq2cLsq6/g63ZHgOk2P8appiBkH0w14RxRJYB7WqJOH2XXMAuN3xaSfuP2hWuoIJx1HV9BGaK+f3dNjg3UCHQkE5YE+Rk/oihB+L8n5f4qBHeW42jTjtAD3ausWMj5f4c0hLWkfA5TrAkWjLSSv1eyOPlSslwgRpc/gDpXninf2cL+2hebEr0c/x3mgOx3zamW9NbrkHyN0WScojGKvHPyWZJEBxPBaLKqna/vvnO6x9ql25HJ16c75EH2bWZTGhuWSpLz5pEtwjDx/VhAbLktpU40fWnxi6U4ai0aPor/zUze7NEJWcxldGVP7k7akTQwaPTRA1qnvZ1EOWCC0tNO7zmdBLCLdEVdKevqMBDf2CG5AvjTRvj/JHxmZFGwvh6ImnM5JNap8LWAbr2csfANL+Gi9Oqm0oFHR3oxDAoFlHRIyZy0QirMY37iywZat7iC7lahuIbxhgK52dkkf+o+0iaF/ybyoj+BSkWxRjJeCY9J8vT9T6188EkaJNw4iqXfEI=
security.ima=0sAwICOIEa+gIAva1xV0gvpIUmpKxFvR9crT1kh5Ye1cz0SbkQ3wVBWaI9LB+841ftTH1XWdIWwd+SiGFbVZ13vdHacxLei/3OzPt01kHSqNCeLTiPACetnXE1xGxvgQ9g+2EvRn+QWmeBehX30FnR6LBiM9Bl5XSSx1ImJER8ZgLnlm6xI7IAVYtcZkA/jkRTQ9L8v2HVv3MfTBKXm71hvTm9WY2wtL+8lcsvMLiazmNtxaXaI16yPkcpkS+8bEI7BkmESm0w3YhEDf8kxECjrv9cGblL0ImYk3gkRJCL1l2p6WaCHDb+tUk17P7+wYXVP5JYXbJfbAGHjpRAS2ktMOihrlv5EvE3bS01U3HrKigMwcbUjVstXYCc6WnG5EcymzotreYIsq6NHDw3/lL6O2nzvcxPX4kJ7Phj+fOpXkNunfyzR5H/k5OzFSy7GpCddQCAxErGtGhhpxscZq0Xbv6NdIkNDLOn4dRBcTL9GD4swkc0F25EhcJeniv68BbbW4L7ElrDzVqLGFKObLcHc0wRGG7Y6aZ3Dpsobp77Ib3c3hoYJJ5cDRiYhl0cXvjwFIYU6A7wrkbryYeJi8u1EEVQW/pNN40UY3t0mZ6pNwu00SzhswbWo23lQvaEerE9xnCGz5qeUSLzDjfw/5757gVmAPlnPL10aRH35dvBW2bDLRuhrSSG3hs=

Pozdro

Ostatnio edytowany przez Jacekalex (2019-01-05 22:37:31)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)