# Epäilyttävien prosessien löytäminen Linux-palvelimilta

> Epäilyttävien prosessien etsintä Linuxissa: tunnista poistetut ohjelmatiedostot, naamionimet ja käynnistyspaikat, yhdistä prosessit pakettiin ja varmista jäljet.

Lähde: https://phpsos.de/fi/blog/verdaechtige-prozesse-linux/  
Tilanne: 25.10.2026  
Palveluntarjoaja: PHP SOS, PHP-hätäapu ja palvelimen tietoturva. Pikaapu WhatsAppilla: https://wa.me/491736494914?text=Hei%20PHP%20SOS%2C%20tarvitsemme%20apua%20PHP-palvelimemme%20kanssa.%20Yritys%3A%20%E2%80%A6%20Verkkosivusto%3A%20%E2%80%A6

**Lyhyesti:** Epäilyttävät prosessit Linux-palvelimilla tunnistatte muutamasta merkistä: ohjelmatiedosto poistettu tai polussa `/tmp`, `/dev/shm` tai verkkohakemistossa, nimi jäljittelee järjestelmäprosessia, epätavallinen käyttäjä, pysyvät verkkoyhteydet tai suuri kuormitus ilman syytä. Tarkistakaa lukevilla komennoilla, kuuluuko ohjelmatiedosto asennettuun pakettiin, ja varmistakaa löydökset, ennen kuin lopetatte mitään.

## Mitä ”epäilyttävä” prosessin kohdalla tarkoittaa

Verkkopalvelimella toimii satoja prosesseja. Useimmat kuuluvat käyttöjärjestelmälle, verkkopalvelimelle, tietokannalle tai PHP:lle. Hyökkääjä, joka on päässyt ajamaan koodia aukon, kuten PHP2Shellin, kautta, yrittää olla herättämättä huomiota niiden joukossa. Hän valitsee huomaamattomia nimiä ja sijoittaa ohjelmia sinne, minne verkkopalvelinkäyttäjä saa kirjoittaa.

Tarkistuksessa auttaa normaalitilan tunteminen. Joka tietää, mitkä palvelut palvelimella kuuluu toimia, millä käyttäjillä ja millä kuormalla, tunnistaa poikkeamat paljon nopeammin. Jos tätä tietoa ei ole, kannattaa käyttää vertailuun samanlaisen, epäilyksistä vapaan palvelimen prosessiluetteloa.

Yksittäinen merkki ei vielä ole todiste. Ratkaisevaa on yhteisvaikutus. Prosessi, jolla on ytimen säikeen nimi, joka toimii käyttäjällä `www-data`, on käynnistetty polusta `/dev/shm` ja pitää yhteyttä ulkomaille, on selvä tapaus. Miten tutkitte erikoistapauksen, jossa verkkopalvelimen alla on shell, kuvaa [Varoitusmerkki: verkkopalvelin käynnistää shellin](https://phpsos.de/fi/blog/webserver-startet-shell/).

## Ensikatsaus viidellä komennolla

Kaikki komennot vain lukevat. Ajakaa ne rootina, jotta näette kaikki prosessit, ja tallentakaa tulosteet tiedostoon verkkohakemiston ulkopuolelle.

```bash
# 1. Kaikki prosessit käyttäjän, vanhemman PID:n, käynnistysajan, CPU:n ja komentorivin kanssa
ps -eo user,pid,ppid,lstart,%cpu,%mem,cmd --sort=-%cpu | head -40

# 2. Prosessit, joiden ohjelmatiedosto on poistettu
ls -l /proc/[0-9]*/exe 2>/dev/null | grep "(deleted)"

# 3. Prosessit, jotka toimivat väliaikaisista tai verkkohakemistoista
ls -l /proc/[0-9]*/exe 2>/dev/null | grep -E " -> (/tmp|/var/tmp|/dev/shm|/var/www)"

# 4. Prosessit, joilla on verkkoyhteyksiä
ss -tunap

# 5. Verkkopalvelinkäyttäjien prosessit yleiskatsauksena
ps -eo user,pid,ppid,lstart,cmd | grep -E "^(www-data|apache|nginx) "
```

Käyttäjänimet vaihtelevat jakelun ja paneelin mukaan; Plesk ja muut paneelit ajavat PHP:n usein kunkin asiakkaan käyttäjänä. Mukauttakaa luettelo ympäristöönne.

Lukekaa tulosteita käynnistysaikaa silmällä pitäen. Prosessit, jotka ovat toimineet palvelimen viimeisestä uudelleenkäynnistyksestä asti, kuuluvat yleensä järjestelmälle. Prosessit, jotka on käynnistetty keskellä yötä tai 17. lokakuuta jälkeisinä päivinä eivätkä sovi mihinkään palveluun, ansaitsevat huomiota. Verratkaa myös PHP-prosessien määrää siihen, mitä poolin konfiguraatio sallii; selvästi enemmän prosesseja verkkopalvelinkäyttäjän alla on vihje.

## Epäilyttävät prosessit Linuxissa: tyypilliset merkit

| Merkki | Miksi se herättää huomiota | Onko harmiton selitys mahdollinen? |
|---|---|---|
| Ohjelmatiedosto ”(deleted)” | Hyökkääjät poistavat tiedostoja käynnistyksen jälkeen | kyllä, pakettipäivitysten jälkeen uudelleenkäynnistykseen asti |
| Käynnistyspaikka `/tmp`, `/dev/shm`, upload-kansio | sinne saa kirjoittaa kuka tahansa tai verkkopalvelin | harvoin |
| Nimi hakasulkeissa kuten `[kworker]` | jäljittelee ytimen säikeitä | ei, jos taustalla on ohjelmatiedosto |
| Pysyvästi suuri CPU-kuorma ilman syytä | tyypillistä kryptolouhijoille | kyllä, eräajoissa tai indeksoinnissa |
| Vanhempiprosessi 1 ja verkkopalvelinkäyttäjä | irrotettu verkkopalvelimesta, jatkaa itsenäisesti | harvoin |
| Yhteys tuntemattomaan kohteeseen | ohjaus tai tietovuoto | kyllä, päivityksissä ja rajapinnoissa |

Aidoilla ytimen säikeillä ei ole ohjelmatiedostoa; `ls -l /proc/PID/exe` ei palauta niille polkua. Jos ytimen nimeä käyttävä prosessi osoittaa tiedostoon, se on naamioitu. Suuren kuorman kohdalla ilman havaittavaa syytä auttaa artikkeli [Kryptolouhijat verkkopalvelimella](https://phpsos.de/fi/blog/kryptominer-auf-dem-server/).

## Vastakoe: kuuluuko ohjelmatiedosto pakettiin?

Lähes kaikki palvelimen oikeutetut ohjelmat tulevat paketinhallinnasta. Ohjelmatiedosto, joka ei kuulu mihinkään pakettiin, ei ole automaattisesti haitallinen, mutta ansaitsee tarkan katsauksen.

```bash
PID=12345
EXE=$(readlink /proc/$PID/exe); echo "$EXE"
dpkg -S "$EXE"        # Debian/Ubuntu: mihin pakettiin tiedosto kuuluu?
rpm -qf "$EXE"        # RHEL-perhe
sha256sum /proc/$PID/exe   # tarkistussumma, toimii myös poistetulla tiedostolla
tr '\0' ' ' < /proc/$PID/environ | head -c 600; echo   # ympäristömuuttujat
```

Jos ohjelmatiedosto on poistettu, `sha256sum /proc/$PID/exe` lukee sen silti käynnissä olevasta prosessista. Tämä tarkistussumma kuuluu dokumentaatioon. Tiedoston kopion saa tehdä vain se, joka osaa säilyttää sen turvallisesti.

## Tarkistuksen rajat käynnissä olevalla järjestelmällä

Kaikki yllä olevat komennot luottavat järjestelmään, jota juuri tarkistatte. Tavallisessa verkkosivuston kautta tehdyssä murrossa verkkopalvelinkäyttäjän oikeuksilla se on perusteltua. Jos hyökkääjä on saanut root-oikeudet, hän voi piilottaa prosesseja ja väärentää tulosteita. Silloin palvelin näyttää vain sen, minkä hyökkääjä sallii.

Vihjeitä ovat ristiriidat: kuormaa ilman näkyvää prosessia, yhteyksiä, jotka palomuuri näkee mutta `ss` ei, tai muutettuja järjestelmäohjelmia. Tällaisissa tapauksissa tarkistus kuuluu tehdä varmistetulle levykuvalle. Käynnissä olevilla järjestelmillä mukaan tulee usein työmuistin varmistus, sillä jotkin haittaohjelmat ovat olemassa vain siellä ja jättävät kiintolevylle vain vähän jälkiä. Tämä varmistus on tehtävä ennen uudelleenkäynnistystä, ja se vaatii sopivat työkalut ja kokemusta. Miksi tämä kannattaa tehdä ennen uudelleenasennusta, selittää [Todisteiden varmistaminen ennen uudelleenasennusta](https://phpsos.de/fi/blog/beweise-sichern-vor-neuinstallation/).

> **Tärkeää:**
> Älkää lopettako epäilyttäviä prosesseja ensimmäisenä toimenpiteenä. Usein cron-työ tai palvelu käynnistää ne uudelleen, ja prosessin mukana katoavat muistista komentorivi, yhteydet ja poistettu ohjelmatiedosto.

## Automaattisen käynnistyksen tarkistus ja seuraavat askeleet

Haitallinen prosessi, joka katoaisi uudelleenkäynnistyksessä, olisi hyökkääjille arvoton. Siksi jokaiseen prosessilöytöön kuuluu kysymys siitä, mikä sen käynnistää. Cron-töiden lisäksi kyseeseen tulevat ennen kaikkea systemd-palvelut, joita root-oikeudet saanut hyökkääjä voi luoda. Silmään pistävät palvelut yleisillä nimillä, joiden ohjelmatiedosto on epätavallisessa hakemistossa, sekä unit-tiedostot, jotka ovat syntyneet 17. lokakuuta jälkeen.

```bash
# Käynnissä olevat palvelut ja äskettäin muutetut unit-tiedostot
systemctl list-units --type=service --state=running --no-pager
find /etc/systemd /usr/lib/systemd /lib/systemd -type f -newerct "2026-10-17" -ls 2>/dev/null

# Ladataanko kirjasto jokaiseen prosessiin? Tiedostoa ei normaalisti ole.
ls -l /etc/ld.so.preload 2>/dev/null && cat /etc/ld.so.preload
```

Merkintä tiedostossa `/etc/ld.so.preload` on tavallisilla verkkopalvelimilla harvinainen ja vahva merkki root-oikeuksilla tehdystä manipuloinnista. Miten ajastetut tehtävät tarkistetaan kokonaan, kuvaa [Piilotettujen cron-töiden tunnistaminen takaovena](https://phpsos.de/fi/blog/cronjobs-als-hintertuer/).

Sen jälkeen seuraavat askeleet tässä järjestyksessä:

1. Varmistakaa tulosteet ja tarkistussummat kellonajan kanssa.
2. Etsikää pysyvyys: cron-työt, systemd-palvelut ja ajastimet, SSH-avaimet.
3. Selvittäkää alkuperä: lokit 20. lokakuuta alkaen, uudet tiedostot verkkohakemistossa.
4. Eristäkää palvelin ja suunnitelkaa siivous tai uudelleenrakennus.

Yleiskatsauksen kaikista tyypillisistä merkeistä PHP2Shellin jälkeen antaa [Olenko jo vaarantunut?](https://phpsos.de/fi/php2shell/bin-ich-gehackt-anzeichen/).

## Miten PHP SOS auttaa konkreettisesti?

- **Prosessien arviointi:** Tarkistamme prosessiluettelon, ohjelmatiedostot ja yhteydet ja arvioimme jokaisen löydön.
- **Oikeudellisesti kestävä varmistus:** [IT-forensiikalla](https://phpsos.de/fi/leistungen/it-forensik/) varmistamme työmuistin ja tallennusvälineet, ennen kuin mitään muutetaan.
- **Pysyvyyden löytäminen:** Etsimme mekanismeja, jotka käynnistävät haitalliset prosessit uudelleen.
- **Päätös:** Siivoamme tai rakennamme uudelleen ja dokumentoimme tapauksen loppuun asti.


## Usein kysytyt kysymykset

**Mistä tunnistan epäilyttävän prosessin Linuxissa?**  
Tyypillisiä merkkejä ovat poistettu ohjelmatiedosto, käynnistyspaikka /tmp tai /dev/shm, nimi, joka jäljittelee järjestelmäprosessia, epätavallinen käyttäjä ja pysyvät verkkoyhteydet. Yksittäiset merkit ovat vihjeitä, useampi yhdessä vakava epäily.

**Mitä ”(deleted)” tarkoittaa kohdassa /proc/PID/exe?**  
Prosessin ohjelmatiedosto on poistettu käynnistyksen jälkeen. Niin tapahtuu oikeutetusti pakettipäivitysten jälkeen, kunnes palvelu käynnistyy uudelleen. Prosesseissa, jotka toimivat väliaikaisista kansioista tai verkkopalvelinkäyttäjän alla, se on tyypillistä naamiointikäyttäytymistä.

**Voinko luottaa ps-komennon tulosteeseen?**  
Tavallisessa murrossa yleensä kyllä. Jos hyökkääjä on kuitenkin saanut root-oikeudet, hän voi manipuloida työkaluja ja tulosteita. Silloin ulkopuolelta tehty tarkistus, esimerkiksi varmistetulta levykuvalta, on luotettavampi.

**Pitäisikö epäilyttävä prosessi lopettaa kill-komennolla?**  
Ei ensimmäisenä. Varmistakaa ensin komentorivi, ohjelmatiedosto, yhteydet ja käynnistysaika. Lopetettu prosessi ei paljasta enää mitään, ja usein cron-työ tai palvelu käynnistää sen kuitenkin uudelleen.

## Lähteet

- [BSI IT-Grundschutz (Saksan liittovaltion tietoturvaviraston IT-perussuojaus)](https://www.bsi.bund.de/DE/Themen/Unternehmen-und-Organisationen/Standards-und-Zertifizierung/IT-Grundschutz/it-grundschutz_node.html)
- [BSI (Saksan liittovaltion tietoturvavirasto)](https://www.bsi.bund.de/)
- [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)
