it-swarm.dev

Jak mohu zachytit síťový provoz jednoho procesu?

Chtěl bych prozkoumat, jak je síťový provoz zpracováván jediným procesem, ale jednoduché zachycení sítě nebude fungovat, protože se zabývám takovým rušným systémem (spousta dalšího provozu se děje současně). Existuje způsob, jak izolovat záznam tcpdump nebo wireshark k síťovému provozu jediného specifického procesu? (Použití netstat je nedostatečné.)

97
Kees Cook

Opravdu existuje způsob, jak používat filtry Wireshark . Nemůžete však filtrovat přímo podle názvu procesu nebo PID (protože se nejedná o síťové množství).

Nejprve byste měli zjistit protokoly a porty používané vaším procesem (příkaz netstat v předchozím komentáři funguje dobře).

Poté pomocí Wireshark filtrujte příchozí (nebo odchozí) port s portem, který právě načtete. To by mělo izolovat příchozí a odchozí provoz vašeho procesu.

20
OpenNingia

Spuštění a sledování nového procesu:

strace -f -e trace=network -s 10000 PROCESS ARGUMENTS

Chcete-li monitorovat existující proces se známým PID:

strace -p $PID -f -e trace=network -s 10000
  • -f je pro „sledovat nové procesy“
  • -e definuje filtr
  • -s nastaví limit řetězců na více než 32
  • -p vezme ID procesu, ke kterému se má připojit
146
Clausi

Vím, že toto vlákno je trochu staré, ale myslím, že by to mohlo některým z vás pomoci:

Pokud to vaše jádro umožňuje, zachycení síťového provozu jednoho procesu se velmi snadno provede spuštěním uvedeného procesu v izolovaném síťovém jmenném prostoru a použitím wireshark (nebo jiných standardních síťových nástrojů) v uvedeném jmenném prostoru.

Nastavení se může zdát trochu složité, ale jakmile to pochopíte a seznámíte se s ním, vaše práce se tak usnadní.

Postupujte takto:

  • vytvořit testovací síťový obor názvů:

    ip netns add test
    
  • vytvořit pár virtuálních síťových rozhraní (veth-a a veth-b):

    ip link add veth-a type veth peer name veth-b
    
  • změnit aktivní jmenný prostor rozhraní veth-a:

    ip link set veth-a netns test
    
  • nakonfigurujte adresy IP virtuálních rozhraní:

    ip netns exec test ifconfig veth-a up 192.168.163.1 netmask 255.255.255.0
    ifconfig veth-b up 192.168.163.254 netmask 255.255.255.0
    
  • nakonfigurujte směrování v testovacím oboru názvů:

    ip netns exec test route add default gw 192.168.163.254 dev veth-a
    
  • aktivujte ip_forward a vytvořte pravidlo NAT) pro předávání provozu přicházejícího z vytvořeného jmenného prostoru (musíte upravit síťové rozhraní a IP adresu SNAT):

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 192.168.163.0/24 -o <your internet interface, e.g. eth0> -j SNAT --to-source <your ip address>
    

    (Pokud chcete, můžete také použít pravidlo MASQUERADE)

  • nakonec můžete spustit proces, který chcete analyzovat, v novém oboru názvů a také wireshark:

    ip netns exec test thebinarytotest
    ip netns exec test wireshark
    

    Budete muset sledovat rozhraní veth-a.

56
felahdab
netstat -taucp | grep <pid or process name>

Zobrazí se spojení, která aplikace vytváří, včetně použitého portu.

16
Oli

Jen nápad: Je možné svázat vaši aplikaci s jinou IP adresou? Pokud ano, můžete použít obvyklé podezřelé ( tcpdump atd.)

Nástroje pro aplikace, které nejsou schopny vázat se na jinou IP adresu:

http://freshmeat.net/projects/fixsrcip

fixsrcip je nástroj pro vazbu odchozích TCP a klientských soketů UDP ( IPv4 ) na konkrétní zdrojové adresy IP na hostitelích s více hostiteli)

http://freshmeat.net/projects/force_bind

force_bind vám umožní vynutit vazbu na konkrétní IP a/nebo port. Funguje jak s IPv4, tak IPv6 .

12
Clausi

Přišel jsem k podobnému problému a byl jsem schopen jej vyřešit na základě tato odpověď ioerror , pomocí NFLOG, jak je popsáno zde :

# iptables -A OUTPUT -m owner --uid-owner 1000 -j CONNMARK --set-mark 1
# iptables -A INPUT -m connmark --mark 1 -j NFLOG --nflog-group 30 
# iptables -A OUTPUT -m connmark --mark 1 -j NFLOG --nflog-group 30 
# dumpcap -i nflog:30 -w uid-1000.pcap

Potom můžete vytvořit spuštění daného procesu z uživatelského účtu, který nedělá nic jiného - a voila, právě jste izolovali a zachytili provoz z jednoho procesu.

Jen jsem chtěl přispět zpět v případě, že to pomůže někomu.

9
szymon

Napsal jsem aplikaci C, která dělá to, co je popsáno ve skvělé odpovědi výše felahdabem!

Viz zde: nsntrace github repo

6
Jonas Danielsson

Můžete zkusit tracedump - http://mutrics.iitis.pl/tracedump

Dělá přesně to, co chcete, můžete buď dát ID procesu nebo program ke spuštění.

5
pjf

Zkuste spustit proces, který vás zajímá, pod strace :

strace ping www.askubuntu.com

Poskytne vám několik velmi podrobných informací o tom, co váš proces dělá. Protože proces může otevřít libovolné porty, které chce kdekoli, pomocí předdefinovaného filtru vám může něco uniknout.

Dalším přístupem by bylo použití rozebraného virtuálního stroje nebo testovacího stroje ve vaší síti a na to váš proces izolovat. Pak stačí použít Wireshark k zachycení všeho z tohoto stroje. Budete si jisti, že provoz, který zachytíte, bude relevantní.

5
The Unix Janitor

Toto je špinavý hack, ale pro dané UID bych doporučil buď odklon, nebo cíl protokolu s iptables. např:

iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner $USER -m tcp -j LOG 
iptables -t nat -A OUTPUT -p udp -m owner --uid-owner $USER -m udp -j LOG 

Také by bylo vhodné podívat se na něco jako '--log-tcp-sekvence', '--log-tcp-options', '--log-ip-options', '--log-uid' pro tento cíl protokolu . I když mám podezření, že vám jen pomůže post proces pcap, který obsahuje tunu dalších dat.

Cíl NFLOG může být užitečný, pokud chcete označit pakety, a pak budou určité označené pakety odeslány přes soket netlink do procesu podle vašeho výběru. Zajímalo by mě, jestli by to bylo užitečné pro hackování něco s wireshark a vaše konkrétní aplikace běží jako konkrétní uživatel?

5
ioerror

Na základě odpověď ioerror Mám podezření, že můžete použít iptables --uid-owner pro nastavení značky na provoz a pak můžete požádat wireshark, aby zachytil pouze provoz s touto značkou. Možná budete moci použít DSCP (marker diferenčních služeb), id toku nebo značku qos.

Nebo byste to opravdu mohli použít k odeslání těchto paketů z jiného rozhraní a poté zachytit pouze na tomto rozhraní.

3
poolie

chyba wireshark # 1184 je tato funkce. Bylo hlášeno v roce 2006 a není implementováno od roku 2019.

2