]> gitweb.morketsmerke.org Git - mmdev.git/commitdiff
Tworzenie rozdziału 10. Rozpoczęcia pisania podrozdziału 10.5/10.5.2.tcpdump
authorxf0r3m <jakubstasinski@protonmail.com>
Tue, 29 Aug 2023 12:08:37 +0000 (14:08 +0200)
committerxf0r3m <jakubstasinski@protonmail.com>
Tue, 29 Aug 2023 12:08:37 +0000 (14:08 +0200)
articles/terminallog/Linux.Podstawy.html

index 596ac6af402dfc8456815c630981b18e45425dbb..fd722bce61485584fb9e5b3821688cda5c3a731c 100644 (file)
@@ -8746,7 +8746,167 @@ sftp&gt;
           SSH.
         </p>
         <h2 id="10.4.inetd">10.4. Demony internetowe - inetd, xinetd</h2>
-      </div>
+        <p>
+          Niektóre małe usługi sieciowe takie jak np. <em>telnetd</em> -
+          demon usługi <em>telnet</em> czy klasyczna usługa FTP oraz wiele
+          innych posiadają te same lub podobne wymagania dotyczące obsługi
+          sieci, zatem żeby nie implementować tego samego kodu. Twórcy tych
+          usług stworzyli superdemona on nazwie <strong>inetd</strong> i 
+          najprościej rzecz ujmując jego zadaniem jest obsługa połączeń:
+          otwieranie portów oraz przekierowywanie połączeń już do właściwych
+          usług.
+        </p>
+        <p>
+          Na przestrzenii lat działania tego rozwiązania powstała nowsza
+          implementacja <strong>xinetd</strong> posiadająca lepsze mechanizmy
+          obsługi oraz kontroli połączeń.
+        </p>
+        <p>
+          Obecnie rzadko spotyka się działający demon <em>inet</em> lub
+          <em>xinetd</em>, został on wyparty przez demona <em>systemctl</em>,
+          a demony które obsługiwał obecnie posiadają własne implementacje
+          obsługi połączeń, z biegiem lat rozszerzały swoje możliwości i
+          finalnie stały się bardziej samodzielne. Wiele życzenia pozostawiaja
+          również kwestie bezpieczeństwa, chociaż wiele rzeczy zostało
+          poprawionych między oryginalną implementacją a <em>xinetd</em>.
+        </p>
+        <p>
+          Inną równie archaiczną rzeczą jest <em>wraper</em> TCP w postaci
+          demona <strong>tcpd</strong>. Jego działanie przypomina nieco
+          działanie filtra sieciowego. Był on wykorzystywany jeszcze zanim
+          takie rozwiązania jak <em>iptables</em> zostały na stałe wdrożone
+          jako swoisty standard i podstawowy poziom ochrony. Zanim ruch z
+          <em>inetd</em> trafił do właściwego demona przechodził przez ten
+          wraper. <em>tcpd</em> rejestrował połączenie następnie konfrontował
+          je z listami dostępu <em>/etc/hosts.allow</em> lub 
+          <em>/etc/hosts.deny</em>, na podstawie informacji ustalonych przez
+          wraper był dopuszczany do właściwego procesu lub nie. 
+        </p>
+        <p>
+          Plikowe listy kontroli dostępu mogą być wykorzystywane w 
+          dystrybucjach klasy enterprise, do ustalenia dostępu do wybranych
+          komponentów systemu. Takim przykładem może być dostęp do <em>cron</em>
+          (harmonogramu zadań). Więcej informacji znajduje się pod tym adresem:
+          <a href="https://morketsmerke.github.io/articles/terminallog/RedHat_-_RHCSA.html#8.2.1.scheduleaccesscontrol">https://morketsmerke.github.io/articles/terminallog/RedHat_-_RHCSA.html#8.2.1.scheduleaccesscontrol</a> 
+        </p>
+        <h2 id="10.5.diagnostictools">10.5. Narzędzia diagnostyczne</h2>
+        <p>
+          Podczas analizownia działania protokołu HTTP, na samym końcu
+          wspomniałem o innym sposobie połączenia się z serwerem WWW przy
+          użyciu programu <em>telnet</em>. Program ten może być programem
+          diagnostycznym w podczas sprawdzania uruchomienia i dostępności
+          usługi. W większości dystrybucji program <em>telnet</em> trzeba
+          będzie zainstalować z repozytorium. Jednak możemy w systemie
+          naleźć co najmniej jedno narzędzie, które jest nam wstanie zwrócić
+          jakieś informacje na temat usług sieciowych takim program jest
+          już omawiany <strong>ss</strong>.
+        </p>
+        <p>
+          Wynik działania programu <em>ss</em>, był już omawiany podczas
+          omawiania transmisji TCP w warstwie transportowej. Ale poniżej
+          znajdują się najważniejsze (dla celów diagnostycznych) opcje.
+        </p>
+        <ul>
+          <li><strong>-t</strong> - informacje o połączeniach TCP</li>
+          <li><strong>-u</strong> - informacje o połączeniach UDP</li>
+          <li><strong>-l</strong> - wyświetla informacje o portach oczekujących
+            na połączenie (nasłuchujących).</li>
+          <li><strong>-a</strong> - wyświetla wszystkie dostępne połączenia w
+            systemie</li>
+          <li><strong>-n</strong> - wyłącza rozwiązywanie nazw (przyspiesza to
+            wynik działania programu jeśli serwery DNS nie odpowiadają).</li>
+          <li><strong>-4, -6</strong> - wyświetlenie informacji dotyczących
+            protokołu IPv4 lub IPv6.</li>
+        </ul>
+        <h3 id="10.5.1.lsofcommand">10.5.1. Polecenie lsof</h3>
+        <p>
+          Jesli pamiętamy z rozdziału 8, polecenie <strong>lsof</strong> służy
+          do wyświetlania otwartych plików w systemie. Z jego pomocą możemy
+          również wyświetlić połączenia realizowane w systemie. Rola tego
+          polecenia może przypominać <em>ss</em>, jednak polecenie <em>lsof</em>
+          do działania w obrębie całego systemu wymagają uprawnień
+          administratora, w przeciwnym razie polecenie wyświetli tylko i
+          wyłącznie połączenia utworzne przez użytkownika, który wydał to
+          polecenie. Aby móc wyświetlić połączenia sieciowe przy użyciu
+          polecenia <em>lsof</em> należy użyć opcji <strong>-i</strong>, tak
+          jak przedstawiono to na poniższym poleceniu.
+        </p>
+<pre class="code-block">
+xf0r3m@vm-3d6b184:/media/xf0r3m/immudex_crypt0$ sudo lsof -i
+COMMAND     PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
+systemd       1    root   35u  IPv4  11469      0t0  TCP *:sunrpc (LISTEN)
+systemd       1    root   36u  IPv4  11472      0t0  UDP *:sunrpc 
+systemd       1    root   37u  IPv6  11475      0t0  TCP *:sunrpc (LISTEN)
+systemd       1    root   38u  IPv6  11478      0t0  UDP *:sunrpc 
+rpcbind     427    _rpc    4u  IPv4  11469      0t0  TCP *:sunrpc (LISTEN)
+rpcbind     427    _rpc    5u  IPv4  11472      0t0  UDP *:sunrpc 
+rpcbind     427    _rpc    6u  IPv6  11475      0t0  TCP *:sunrpc (LISTEN)
+rpcbind     427    _rpc    7u  IPv6  11478      0t0  UDP *:sunrpc 
+avahi-dae   476   avahi   12u  IPv4  13560      0t0  UDP *:mdns 
+avahi-dae   476   avahi   13u  IPv6  13561      0t0  UDP *:mdns 
+avahi-dae   476   avahi   14u  IPv4  13562      0t0  UDP *:33600 
+avahi-dae   476   avahi   15u  IPv6  13563      0t0  UDP *:34773 
+NetworkMa   675    root   26u  IPv4  14371      0t0  UDP vm-3d6b184.morketsmerke.org:bootpc-&gt;DDI1184JS.mshome.net:bootps 
+cupsd       790    root    6u  IPv6  14463      0t0  TCP localhost:ipp (LISTEN)
+cupsd       790    root    7u  IPv4  14464      0t0  TCP localhost:ipp (LISTEN)
+cups-brow   860    root    7u  IPv4  15147      0t0  UDP *:631 
+chronyd     883 _chrony    5u  IPv4  14538      0t0  UDP localhost:323 
+chronyd     883 _chrony    6u  IPv6  14539      0t0  UDP localhost:323 
+ssh       60722  xf0r3m    3u  IPv4 187934      0t0  TCP vm-3d6b184.morketsmerke.org:36440-&gt;ip82-117-231-222.static.awhost.cloud:2022 (ESTABLISHED)
+</pre>
+        <p>
+          Na powyższym przykładzie możemy zauważyć, że wyjście tego polecenia
+          jest trochę bardziej podrasowanym wyjściem polecenia <em>ss</em>.
+          Poza tym <em>lsof</em> daje nam możliwość przefiltrowania listy
+          dostępnych połączeń. Ogólny format filtru wygląda następująco:
+        </p>
+<pre class="code-inline">
+$ sudo lsof -i[wersja_IP][protokół]@[komputer]:[port]
+</pre>
+        <p>
+          Oczywiście istnieje pełna dowolność w stosowaniu tych elementów, aby
+          to pokazać przedstawię kilka użytecznych filtrów:
+        </p>
+<pre class="code-block">
+xf0r3m@vm-3d6b184:/media/xf0r3m/immudex_crypt0$ sudo lsof -i4 -s TCP:LISTEN
+COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
+systemd   1 root   35u  IPv4  11469      0t0  TCP *:sunrpc (LISTEN)
+rpcbind 427 _rpc    4u  IPv4  11469      0t0  TCP *:sunrpc (LISTEN)
+cupsd   790 root    7u  IPv4  14464      0t0  TCP localhost:ipp (LISTEN)
+</pre>
+        <p>
+          Powyższy przykład przestawia wyłącznie otwarte porty dla transmisji
+          TCP. W tym przypadku uzyskanie stanu połączenia
+          (<code class="code-inline">LISTEN</code>) wymaga podania dodatkowe
+          opcji (<code class="code-inline">-s</code>) a ona ma swoją składnię
+          dla wartości: <em>PROTOKOŁ:STAN</em>.
+        </p>
+<pre class="code-block">
+xf0r3m@vm-3d6b184:/media/xf0r3m/immudex_crypt0$ sudo lsof -iTCP@searx.morketsmerke.org
+COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
+ssh     60722 xf0r3m    3u  IPv4 187934      0t0  TCP vm-3d6b184.mshome.net:36440->ip82-117-231-222.static.awhost.cloud:2022 (ESTABLISHED)
+</pre>
+        <p>
+          Ciekawy przypadek mamy tutaj. Ponieważ wśród połączeń TCP wyszukujemy
+          hosta o konkretnej nazwie. Nie dostajemy informacji zwrotnej, że coś
+          jest nie tak, wręcz przeciwnie uzyskujemy odpowiedź i to prawidłową.
+          Adres <code class="code-inline">searx.morketsmerke.org</code> jest 
+          odwzrowywany do 82.117.231.222, ale jeśli skorzystamy z zamiany 
+          adresu IP na nazwę domenową wówczas otrzymamy taki oto wynik:
+          <code class="code-inline">ip82-117-231-222.static.awhost.cloud</code>
+          Więc jeśli adres <code class="code-inline">searx.morketsmerke.org</code>
+          jest tożsamy z 
+          <code class="code-inline">ip82-117-231-222.static.awhost.cloud</code>,
+          co oznacza, że filtr jest jak najbardziej poprawny. Poniżej znajduje
+          się ostatni już przykład:
+        </p>
+<pre class="code-block">
+xf0r3m@vm-3d6b184:/media/xf0r3m/immudex_crypt0$ sudo lsof -i6UDP:323
+COMMAND PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
+chronyd 883 _chrony    6u  IPv6  14539      0t0  UDP localhost:323 
+</pre>
+        <h3 id="10.5.2.tcpdump">10.5.2. tcpdump</h3>
+       </div>
                        <p style="margin: 15px; padding: 0; outline: 0;">
                                2022; COPYLEFT; ALL RIGHTS REVERSED;
                        </p>