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 [url=https://morfikov.github.io/post/budowanie-kernela-linux-dla-konkretnej-maszyny-z-debianem/]taki artykuł[/url].
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:
[quote="about:buildconfig"]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 -[b]Wformat-security[/b] -[b]Wformat-overflow=2[/b] -march=native -pipe -[b]U_FORTIFY_SOURCE[/b] -[b]D_FORTIFY_SOURCE=2[/b] -[b]fstack-protector-strong[/b] -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 -[b]U_FORTIFY_SOURCE[/b] -[b]D_FORTIFY_SOURCE=2 [/b]-[b]fstack-protector-strong[/b] -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 -[b]Wformat-security[/b] -[b]Wformat-overflow=2[/b] -fno-sized-deallocation -march=native -pipe -fno-delete-null-pointer-checks -fno-lifetime-dse -fno-schedule-insns -fno-schedule-insns2 -[b]U_FORTIFY_SOURCE[/b] -[b]D_FORTIFY_SOURCE=2[/b] -[b]fstack-protector-strong[/b] -fno-exceptions -fno-strict-aliasing -fno-rtti -ffunction-sections -fdata-sections -fno-exceptions -fno-math-errno -pthread -pipe -O2 -fomit-frame-pointer[/quote]
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 [b]Wformat-security[/b] 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:
[quote="https://morfikov.github.io/post/budowanie-kernela-linux-dla-konkretnej-maszyny-z-debianem/"]
-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
[/quote]
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
[quote=Jacekalex]Zapomniałeś o kilku fladze kompilatora:
Wformat-security
która wciąga szereg innych mechanizmów bezpieczeństwa.[/quote]
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 [b]-Werror=format-security[/b] , która pociąga ten [b]-Wformat-security[/b] 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[b] break=premount [/b]. 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
[url=https://morfikov.github.io/post/automatyczne-podpisywanie-modulow-kernela-przez-dkms/]Kwestia podpisywania modułów DKMS[/url] 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
Time (s) | Query |
---|---|
0.00017 | SET CHARSET latin2 |
0.00009 | SET NAMES latin2 |
0.00152 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.137.162.21' WHERE u.id=1 |
0.00100 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.137.162.21', 1732184349) |
0.00087 | SELECT * FROM punbb_online WHERE logged<1732184049 |
0.00128 | SELECT topic_id FROM punbb_posts WHERE id=322591 |
0.00091 | SELECT id FROM punbb_posts WHERE topic_id=30795 ORDER BY posted |
0.00086 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30795 AND t.moved_to IS NULL |
0.00008 | SELECT search_for, replace_with FROM punbb_censoring |
0.00089 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30795 ORDER BY p.id LIMIT 0,25 |
0.00122 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30795 |
Total query time: 0.00889 s |