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-02-06 10:27:44

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

Jak ustalić PID/ścieżkę procesu, który próbuje wysłać pakiet sieciowy?

Z reguły procesy wysyłają pakiety sieciowe bez większego skrępowania, bo w filtrze pakietów w OUTPUT jest zwykle "accept". Jeśli się tam ustawi "drop", to procesy będą mieć zabronioną komunikację ze światem. Każdy pakiet, który trafi na zaporę sieciową można zalogować np. dodają taką regułę:

Kod:

add rule inet filter OUTPUT limit rate 30/minute burst 1 packets log flags all prefix "* OUTPUT * " counter drop

Co z kolei zwróci komunikat podobny do tego poniżej:

kernel: * OUTPUT * IN= OUT=bond0 SRC=192.168.0.135 DST=104.81.106.31 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=39568 DF PROTO=TCP SPT=56784 DPT=443 SEQ=3504435004 ACK=0 WINDOW=64240 RES=0x00 SYN URGP=0 OPT (020405B40402080A03AC71A60000000001030309) UID=1000 GID=1000

Tam w tej regułce nftables został użyty "flags all", który czyni ten komunikat nieco bardziej nasycony informacją ale brakuje w nim numerka z PID'em procesu (ew. ścieżki do programu, który ten pakiet chciał wysłać). Jest co prawda UID i GUI, ale na ich podstawie nic zbytnio wywnioskować się nie da.  xD

Jest jakiś sposób by ten PID uzyskać, tak by przy okazji poznać ścieżkę do programu, który próbuje się skomunikować ze światem? Netstat i inne tego typu narzędzia mogą być nieco pomocne ale co w przypadku, gdy proces się uruchomi, spróbuje wysłać pakiet i się zakończy?

Offline

 

#2 2019-02-06 10:40:22

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

Re: Jak ustalić PID/ścieżkę procesu, który próbuje wysłać pakiet sieciowy?

Zablokować wszystko a otwierać per program via cgroup, to najprościej.

Jedyna wada - nie działa z KDE/Akregatorem, bo ten się przez socket unix czy gniazdo IPC komunikuje z kdeinit, kdeinit odpala kio - http.so , który to proces nie ma nic wspólnego z Akregatorem w drzewku procesów.

Takiej funkcjonalności jaką potrzebujesz nie ma w FW w ogóle, potrafią to systemy
ACL jak Apparmor czy SELinux. (AA teraz jest na zakręcie, w 4.19 działają łatki AA-network, od 4.20 AA podobnie jak SELinux będzie korzystał z SECMARK i tablicy SECURITY Netfiltera).
Jeszcze nie znam szczegółów, ale docelowo ma ten mechanizm AA-secmark brykać chyba w jaju 5.0.
W 4.20 są jakieś początki tego mechanizmu.

Rzuć okiem tutaj:
https://lists.ubuntu.com/archives/apparmor/2019-January/011906.html
https://lists.ubuntu.com/archives/apparmor/2019-January/011907.html

Jak AA-secmark będzie w standardowym jaju, to zrozumiesz,
po co się męczysz z profilami AA dla Systemd i jakimś kretyńskim full-system-policy. xD

Ostatnio edytowany przez Jacekalex (2019-02-06 10:46:09)


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

Offline

 

#3 2019-02-06 10:48:37

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

Re: Jak ustalić PID/ścieżkę procesu, który próbuje wysłać pakiet sieciowy?

No ja chcę właśnie sobie taki fw na cgroups zrobić i sporo appek już jest w swoich grupach, choć docelowo to będzie mark 1 na allow, i mark 2 na block (albo coś podobnego). xD problem w tym, że mój system próbuje się komunikować ze światem i za bardzo nie wiem, które usługi próbują to robić. Np. miałem usługę od synchronizacji czasu. No to akurat wiedziałem, bo port był 123, a tych usług od synchronizacji czasu u mnie w systemie to jest aż jedna i dało radę ją wyłapać. xD Ale szereg procesów używa portu 443 albo 80 i jak ustalić na podstawie takiego komunikatu zapory, który to proces? Ewentualnie może jest inny sposób by to zrobić? Część rzeczy można przez netstat wyciągnąć ale jak proces się zakończy, to już go tam nie widać...

Offline

 

#4 2019-02-06 12:13:11

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

Re: Jak ustalić PID/ścieżkę procesu, który próbuje wysłać pakiet sieciowy?

Jako, że w logu widnieje timestamp (co prawda, z dokładnością do 1s) to można spróbować skorelować pewne informacje. Są dwa ciekawe narzędzia lastcomm i forkstat . Generalnie to te narzędzia są w stanie zalogować wykonywane polecenia.

Dla przykładu, w logu jest komunikat:

Feb 06 11:57:02 morfikownia kernel: * IPTABLES:OUTPUT * IN= OUT=bond0 SRC=192.168.0.135 DST=206.252.253.41 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=35130 DF PROTO=TCP SPT=51620 DPT=443 SEQ=2106491040 ACK=0 WINDOW=64240 RES=0x00 SYN URGP=0 OPT (020405B40402080A7BFA98690000000001030309) UID=1000 GID=1000

Szukając procesu w lastcomm ,

Kod:

# lastcomm morfik --debug | grep 11:57:

nic się nie zobaczy do momentu, aż proces się zakończy, czyli w sumie jeśli proces działa, to można go złapać zwykle przez netstat. Z kolei jeśli proces się zakończy to będzie widniał on w logu lastcomm z datą jego wywołania, czyli mniej więcej tą, która widnieje w logu nftables:

Kod:

CURRENT REC: wget            |v3|     2.00|     0.00|   869.00|  1000|  1000| 22416.00|     0.00|   99233|   96424|    X|       0|pts/11  |Wed Feb  6 11:57:02 2019

Oczywiście tych procesów w danej sekundzie będzie zwykle więcej niż 1 i trzeba będzie się trochę wysilić by znaleźć ten, który chciał wysłać pakiet ale to powinno już pójść łatwo. xD

Z kolei  jeśli chodzi o forkstat , to on monitoruje wywołania procesów w czasie rzeczywistym:

Kod:

# forkstat -e exec -x -l | grep morfik
12:09:49 exec  102626 morfik pts/11                 wget -c --no-check-certificate --referer=...

Można by sobie to wyjście przekierować do pliku i tam później poszukać winowajcy. xD

Offline

 

#5 2019-02-06 12:15:04

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

Re: Jak ustalić PID/ścieżkę procesu, który próbuje wysłać pakiet sieciowy?

A te appki, co się nie łączą, nie umieją zapłakać że ich do netu nie puszcza?
Poza Akregatorem wszystko, co miałem w systemie kiedykolwiek, zazwyczaj o net płakało osobiście, lub przynajmniej w logach pokazało, co je boli.

Dlatego Appka co nie ma neta, i nie wiadomo która, to mnie mocno dziwi.

Ostatnio edytowany przez Jacekalex (2019-02-06 12:16:18)


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

Offline

 

#6 2019-02-06 12:19:27

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

Re: Jak ustalić PID/ścieżkę procesu, który próbuje wysłać pakiet sieciowy?

No z reguły płaczą ale też nie wszystkie. A poza tym, jak jakiś syf wlezie do systemu i będzie chciał wysłać coś na net, to będzie płakał, że "neta chce i dajta wyjść za FW"? xD

Offline

 

#7 2019-02-06 21:04:57

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

Re: Jak ustalić PID/ścieżkę procesu, który próbuje wysłać pakiet sieciowy?

Na syf co wejdzie jest kilka metod, np Aide, Rkhuter, Tiger, IMA+EWM, itp.

Z reszta pomóż jakoś temu syfowi, do mnie jakoś nigdy żaden nie wszedł na razie.

Kilka razy sam chciałem taki syf jeden czy drugi zainstalować, i też nie dałem rady osobiście.

Dlatego filtrowanie OUTPUTU w FW trzeba skoordynować z ACL, żeby nie gadały z netem programy, które nie są chronione przez AA.

Do końca to zrobić trudno, ale np applet pogodowy dostał własne "gniazdko".

Kod:

/usr/libexec/mate-applets/mateweather-applet (enforce)

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

Offline

 

#8 2019-02-07 06:32:00

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

Re: Jak ustalić PID/ścieżkę procesu, który próbuje wysłać pakiet sieciowy?

No mi też nigdy żaden syf jeszcze nie wlazł ale lepiej być przygotowanym. xD Póki co to ustaliłem, że prawdopodobnie to jakieś kio_http mi nawiązuje te połączenia, pewnie przy odpalaniu amaroka albo jakiegoś komponentu, z którego on korzysta. Tak czy inaczej powiązane z kde.

Tu jest jeszcze parę rzeczy, które mi ludzie podrzucili:
https://www.linkedin.com/pulse/using-auditd-monitor … ex-maestretti
https://serverfault.com/questions/352259/finding-sh … 352275#352275
https://github.com/themighty1/lpfw

Offline

 

#9 2019-02-07 09:49:06

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

Re: Jak ustalić PID/ścieżkę procesu, który próbuje wysłać pakiet sieciowy?

Auditd jest dopasowany do API Selinuxa.

Jak chciałem się dowiedzieć, co mi kasuje zawartość /run w systemie, to niestety auditd tego nie wyjaśnił mimo usilnych prób z mojej strony, aby to uczynił, dopiero RBAC Grsecurity wyjaśnił sprawę do końca.
Doceniłem wtedy ideę full-system-policy jak nigdy. xD

Co do Amaroka, to developerzy KDE chcieli zrobić wspaniale, wyszło jak zwykle.

Żeby uchwycić kio-http zainteresuj się poleceniem kioexec, u mnie siedzi w:

Kod:

/usr/lib64/libexec/kf5/kioexec

to chyba przez niego kdeinit odpala połaczenia sieciowe.

Zawsze możesz popytać na oficjalnym forum KDE z resztą.

Albo pożegnać Amaroka, nie jest na szczęście monopolistą.


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

Offline

 

#10 2019-02-07 10:31:33

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

Re: Jak ustalić PID/ścieżkę procesu, który próbuje wysłać pakiet sieciowy?

No mi auditd trochę rzeczy powiedział i udało się w końcu namierzyć winnego -- kdeinit4, no i to jest od amaroka, bo tylko on jeszcze nie został przepisany na kde5. Jak dałem marka na kdeinit4 i kdeinit5, to oznacza pakiety i można je złapać w nftables:

Kod:

# nft list chain inet filter check-cgroup
table inet filter {
        chain check-cgroup {
                ...
                meta cgroup { 513 } counter packets 21 bytes 1260 accept comment "kde"
                meta cgroup { 514 } counter packets 0 bytes 0 accept comment "kde-krusader"
                meta cgroup { 515 } counter packets 0 bytes 0 accept comment "kde-amarok"
                meta cgroup { 2048 } counter packets 0 bytes 0 accept comment "block apps"
        }
}

Choć jak w amaroku pobieram napisy do piosenek, to jednak leci na mark od kdeinit a nie od amaroka. xD

Kod:

# cat /sys/fs/cgroup/net_cls,net_prio/gui/user-apps/kde/amarok/net_cls.classid
515
# cat /sys/fs/cgroup/net_cls,net_prio/gui/user-apps/kde/net_cls.classid
513

Ciekawe czy się da to jakoś rozróżnić, bo jak to będzie wybór na zasadzie, że całe kde ma dostęp do netu lub go nie ma, to ciekawe środowisko zrobili. xD

Próbowałem złapać tego kioexec ale jakoś nie daje rady ani po ścieżce ani po nazwie, więc tylko kdeinit zostaje.

Offline

 

#11 2019-02-07 13:31:01

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

Re: Jak ustalić PID/ścieżkę procesu, który próbuje wysłać pakiet sieciowy?

KDeinit też można łapać, ale to jest wyższa szkoła jazdy, dosyć losowa:

Kod:

****************************************************************
###  Program:  /usr/bin/kdeinit5   ###  user: pacjent  ###
................................................................
15:debug:/
14:rdma:/
13:pids:/users/akregator
12:hugetlb:/
11:net_prio:/
10:perf_event:/
9:net_cls:/users/akregator
8:freezer:/
7:devices:/
6:memory:/users/akregator
5:blkio:/users/akregator
4:cpuacct:/users/akregator
3:cpu:/users/akregator
2:cpuset:/
1:name=openrc:/xdm
0::/xdm
................................................................

Apparmor: /usr/bin/akregator (enforce) 
................................................................

Jak widać, o ile nie używam KDE, to kdeinit grzecznie siedzi w cgroup i profilu AA Akregatora.
Ale jak coś odpali kdeinit wcześniej, to już wisi jako demon i następne programu gadają z kdeinit przez dbusa.

Reasumując, trzeba przez AA i cgroup ogarnąć kdeinit bezpośrednio.

mam takie 3 dziadostwa:

Kod:

/usr/bin/kdeinit5  
/usr/bin/kdeinit5_shutdown  
/usr/bin/kdeinit5_wrapper

Coś się zaczyna:

Kod:

audit: type=1400 audit(1549543408.304:5931): apparmor="DENIED" operation="exec" profile="/usr/bin/kdeinit5" name="/usr/lib64/libexec/kf5/klauncher" pid=28499 comm="klauncher" requested_mask="x" denied_mask="x" fsuid=1001 ouid=0

Ostatnio edytowany przez Jacekalex (2019-02-07 13:45:55)


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

Offline

 

#12 2019-02-07 14:11:31

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

Re: Jak ustalić PID/ścieżkę procesu, który próbuje wysłać pakiet sieciowy?

Profil kdeinit5 rośnie w oczach:

Kod:

# Last Modified: Thu Feb  7 14:04:52 2019
#include <tunables/global>

/usr/bin/kdeinit5 {
  #include <abstractions/X>
  #include <abstractions/base>
  #include <abstractions/dbus>
  #include <abstractions/gnome>
  #include <abstractions/nameservice>
  #include <abstractions/openssl>

  network netlink dgram,
  network netlink raw,

  signal receive set=term peer=/usr/bin/akregator,

  unix,

  /dev/dri/ r,
  /proc/sys/kernel/core_pattern r,
  /sys/devices/**/device r,
  /sys/devices/**/uevent r,
  /sys/devices/**/vendor r,
  /usr/bin/kdeinit5 mr,
  /usr/lib64/libexec/kf5/* pix,
  /usr/lib{,32,64}/** mr,
  owner /dev/shm/.org.chromium.Chromium.* rw,
  owner /home/*/.cache/** rw,
  owner /home/*/.cache/mesa_shader_cache/index rw,
  owner /home/*/.compose-cache/** w,
  owner /home/*/.config/kdeglobals r,
  owner /home/*/.config/kio_httprc r,
  owner /home/*/.config/ksslcertificatemanager r,
  owner /proc/*/cmdline r,
  owner /var/run/user/*/*-socket rw,
  owner /var/run/user/*/kdeinit5* rw,
  owner /var/run/user/*/kio_http_cache_cleaner rw,
  owner /var/run/user/*/* lrw,

}

Ostatnio edytowany przez Jacekalex (2019-02-07 14:12:12)


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

Offline

 

#13 2019-02-07 15:51:17

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

Re: Jak ustalić PID/ścieżkę procesu, który próbuje wysłać pakiet sieciowy?

No ja kdeinit4 i kdeinit5 odpalam na starcie openbox'a i to na samym początku, tak by mi ich nic nie odpaliło, bo potem są problemy z regułami a profilach AA. A co do profili AA dla kdeinit, to daj sobie spokój. xD Ja kiedyś próbowałem zamknąć kdeinit4 i kdeinit5 i w końcu chciało dostęp do wszystkiego, to se dałem siana. :] Jeśli masz appki kde i korzystasz z nich, to prędzej czy później u ciebie też zachce dostęp do wszystkiego. xD

Ostatnio edytowany przez morfik (2019-02-07 15:51:51)

Offline

 

#14 2019-02-07 19:39:05

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

Re: Jak ustalić PID/ścieżkę procesu, który próbuje wysłać pakiet sieciowy?

Ja pomalutku zbliżam się do full-system-policy, także mogę dać do wszystkiego
ale z wyjątkiem private-files, i np zabronić  setuid i setgid i parę innych podejrzanych akcji.
I to i tak będzie kopernikańska zmiana.

To akurat nie problem, tak  chyba muszę zrobić w profilu do sudo/su, do basha, pythona, perla i kilku innych.

Jestem na podobne scenariusze przygotowany od dawna.

Z KDE to mam nie tyle appki, tylko poważnie biorę pod uwagę Plasmę po migracji na Waylanda.

W Gtk4 i Mate na Nvidii z Waylandem wierzę średnio, a obecny Mate na Gtk2 działa grzecznie ale tylko na Xorgu.

Ostatnio edytowany przez Jacekalex (2019-02-07 20:38:44)


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 ;-)