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 Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

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

  morfik - Cenzor wirtualnego świata

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 [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

 

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

  Jacekalex - Podobno człowiek...;)

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:

[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]

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 [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/"]

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

[/quote]
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

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

Re: Budowanie kernela linux dla konkretnej maszyny z Debianem

[quote=Jacekalex]Zapomniałeś o kilku fladze kompilatora:

Kod:

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

 

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

  morfik - Cenzor wirtualnego świata

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

Re: Budowanie kernela linux dla konkretnej maszyny z Debianem

[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

 

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

  Jacekalex - Podobno człowiek...;)

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-03-08 10:36:42)


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
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.011 seconds, 14 queries executed ]

Informacje debugowania

Time (s) Query
0.00010 SET CHARSET latin2
0.00005 SET NAMES latin2
0.00137 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='18.224.55.63' WHERE u.id=1
0.00080 UPDATE punbb_online SET logged=1732354286 WHERE ident='18.224.55.63'
0.00056 SELECT * FROM punbb_online WHERE logged<1732353986
0.00062 DELETE FROM punbb_online WHERE ident='3.136.19.203'
0.00064 DELETE FROM punbb_online WHERE ident='3.17.76.174'
0.00058 DELETE FROM punbb_online WHERE ident='3.23.92.64'
0.00071 SELECT topic_id FROM punbb_posts WHERE id=322583
0.00080 SELECT id FROM punbb_posts WHERE topic_id=30795 ORDER BY posted
0.00064 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.00005 SELECT search_for, replace_with FROM punbb_censoring
0.00094 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.00079 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30795
Total query time: 0.00865 s