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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
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
Zapomniałeś o kilku fladze kompilatora:
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
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:
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)
Offline
Jacekalex napisał(-a):
Zapomniałeś o kilku fladze kompilatora:
Kod:
Wformat-securityktó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
Kwestia podpisywania modułów DKMS też została została rozwiązana.
Offline
Ż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:
touch plik evmctl sign --imasig plik evmctl verify plik
Prawidłowy wynik trzeciego polecenia:
Verification is OK
Jeżeli powyższy test nie wykazał żadnych problemów, można podpisywać moduły:
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?
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-03-08 10:36:42)
Offline
Strony: 1