Mail­ser­ver: Nach mög­li­chen Sicher­heits­lü­cken durch Scrip­te überprüfen

Linux

Die letz­ten Tagen war ich inten­siv damit beschäf­tigt, etwa­ige Sicher­heits­lü­cken (in mei­nem Mail­ser­ver) aus­fin­dig zu machen, denn mein System/der Mail­ser­ver wird wahr­schein­lich missbraucht.

Hin­weis: Die­ser Bei­trag rich­tet sich eher an tech­nisch ver­sier­ten Men­schen, die sich (etwas) mit Linux, Ser­ver und Co. auskennen.

Seit eini­ger Zeit hält mich ein „Hacker” in Schacht, weil er Spam­mails in Form von Phis­hing ver­sen­det. Dar­in wird erläu­tert, dass eine Über­prü­fung des Bank­kun­den erfor­der­lich sei und das in regel­mä­ßi­gen Abstän­den nun gesche­hen wird.

Bis­her nichts spek­ta­ku­lä­res, rich­tig, jedoch wur­de als Absen­der­adres­se mei­ne „Ser­ver­do­main” benutzt. Für die Haupt-IP-Adres­se mei­nes Ser­vers habe ich eine Domain, die zeit­gleich als Host­na­me greift und auch für den Mail­ser­ver als MX-Ein­trag gilt. Nun hat man die­se Domain als Absen­der der Phis­hing-Mails genutzt, sodass es für den Emp­fän­ger aus­sieht, als hät­te ich die Emails versendet.

Dar­auf auf­merk­sam gewor­den bin ich, weil ich fort­lau­fend von irgend­ei­ner ara­bi­schen Fir­ma auto­ma­ti­sche Emails von deren Mail­ser­ver erhal­ten habe, dass die Email nicht ange­nom­men wur­de, weil ent­we­der das Post­fach nicht erreich­bar war oder das Post­fach gar nicht mehr exis­tiert. Im Anhang war dann mei­ne angeb­lich ver­sen­de­te Email.

Im ers­ten Moment war ich rat­los. Wie­so ver­sen­de „ich” (angeb­lich) sol­che Phis­hing-Emails und vor allem, wie­so teilt mir ein ara­bi­scher Mail­ser­ver sol­che Feh­ler­mel­dun­gen mit. Im zwei­ten Moment war mir dann eigent­lich ziem­lich klar, dass hier Email-Spoo­fing betrie­ben wird. Jemand fälscht die Adres­se des Absen­ders und gibt sich somit als jemand anders aus. Etwa­ige Feh­ler­mel­dun­gen wer­den dann logi­scher­wei­se dem „Opfer” zuge­stellt, des­sen Email-Adres­se benutzt wird.

Dar­auf­hin habe ich dann ein­ge­hen­de Emails von dem Mail­ser­ver blo­ckiert und hab den Inha­ber kon­tak­tiert, dass mit sei­nem Ser­ver Blöd­sinn betrie­ben wird (bis dato noch kei­ne Rückmeldung).

Aus­zug der mail.log: „Nov 4 14:39:52 xxxxxxxxxxxx postfix/smtpd[6519]: NOQUEUE: reject: RCPT from shaggy.sofcongroup.com[87.101.204.227]: 554 5.7.1 <shaggy.sofcongroup.com[87.101.204.227]>: Cli­ent host rejec­ted: STOP SPAM; from=<> to=<xxxx@xxxxxxxxxxxx.xxx> proto=SMTP helo=<mail.sofcongroup.com>”

Im spä­te­ren Ver­lauf habe ich dann zusätz­li­che Emails (Rejects) von Mail­ser­vern wie GMX, WEB und Co. erhal­ten, weil der Emp­fän­ger nicht mehr exis­tiert. In der Zwi­schen­zeit habe ich auch mitt­ler­wei­le Ant­wor­ten auf die Phis­hing-Mails erhal­ten, dass ich doch ein Betrü­ger sei und Co. – ja, es ant­wor­ten echt Men­schen auf Phis­hing-Mails, hät­te ich wirk­lich nie gedacht.

Mein Favo­rit: „Respekt. Recht­schreib­feh­ler au Mas­se und noch einen OVH-Ser­ver nut­zen? Na viel Spaß demnächst”

Ich hab mir dann auch mal die Mühe gemacht und auf allen mensch­li­chen Ant­wor­ten die Rück­mel­dung gege­ben, dass ich es nicht war, Email-Spoo­fing betrie­ben wird und ein­fach nur der Absen­der gefälscht wur­de. Ver­gleich­bar mit, dass jemand ein Brief ver­fasst, als Absen­der ein­fach irgend­ei­ne ande­re Adres­se auf dem Umschlag schreibt und abschickt.

So para­no­id wie ich manch­mal bin, woll­te ich trotz­dem zu ein­hun­dert Pro­zent selbst fest­stel­len, dass nicht doch mein Mail­ser­ver über­nom­men wur­de. Bei­spiels­wei­se durch irgend­ein Script, der die PHP-Mail-Funk­ti­on nutzt. Daher hat­te ich nun (php)sendmail ver­än­dert, sodass nicht nur in einem sepa­ra­ten Log ange­zeigt wird, wenn eine PHP-Mail ver­sen­det wur­de, son­dern auch auto­ma­tisch in der Email-Hea­der steht, wel­che PHP-Datei dafür ver­ant­wort­lich ist.

PHP-Mail-Send-Log: „2016–11-02T23:46:59+0100 send­mail-wrap­per cal­led www-data from /home/www/domain.tld/”

Email-Hea­der: „X‑PHP-Ori­gi­na­ting-Script: 0:mailtest.php”

Soll­te also irgend­ein Script dafür ver­ant­wort­lich sein, dass die­se Emails ver­fasst wird, wer­de ich es mit die­ser Metho­de auf jeden Fall her­aus­fin­den. Einen Open-Relay-Mail­ser­ver betrei­be ich logi­scher­wei­se nicht, sodass ich das aus­schlie­ßen kann. Wie man so etwas nun ein­rich­tet, zei­ge ich euch nun.

Unter „/usr/lib” gibt es die Datei namens „send­mail” und unter „/usr/local/bin” die Datei namens „phpsend­mail”. Bei­de soll­te man irgend­wo als Back­up abspei­chern, alter­na­tiv am Ende ein Unter­strich und/oder ähn­li­ches hin­zu­fü­gen. Anschlie­ßend die Datei noch­mal erstel­len, fol­gen­des ein­fü­gen und abspeichern:

#!/bin/sh
TODAY=‘date ‑Ise­conds‘
echo $TODAY send­mail-wrap­per cal­led $USER from $PWD »/tmp/mail.send
(echo X‑Ad­di­tio­nal-Hea­der: $(dir­na­me $PWD);cat) | /us­r/­li­b/­send­mail-real „$@”

Hin­weis: Ich bezie­he mich hier auf einer Debi­an 8.5 Instal­la­ti­on mit php5-fpm (nginx) und HHVM. Mög­li­cher­wei­se hei­ßen die Datei­en bei einem anders oder es exis­tiert nur eine Datei. Mein Vor­ge­hen ist so, dass im Log nicht nur der PHP-Mail­ver­sand von php5-fpm pro­to­kol­liert wird, son­dern auch der über HHVM.

Nach­dem man das getan hat, wird der PHP-Mailer so (zusätz­lich) ein­ge­setzt, dass nicht nur der Ver­sand eines PHP-Mails unter „/tmp/mail.send” pro­to­kol­liert wur­de, son­dern in der ver­sen­de­te Email auch noch einen „X‑PHP-Originating-Script”-Hinweis gesetzt wird. Bei­des beinhal­tet den Datei­na­men, der für den PHP-Mail­ver­sand ver­ant­wort­lich ist.

Möch­te man dies irgend­wann nicht mehr nut­zen, kann die zwei Datei­en ein­fach löschen und die alten, zuvor umbe­nann­ten Datei­en wie­der in den Ori­gi­nal­na­men umbe­nen­nen (in mei­nem Fall ein­fach den Unter­strich am Ende entfernen).

Das war mir per­sön­lich aber noch nicht genug, sodass ich noch auf das „maldetect”-Paket gesto­ßen bin. Die­ses Paket über­prüft vor­han­de­ne Datei­en nach Mal­wa­re und Co., auf Wunsch auch regel­mä­ßig. Lei­der ist das Paket aber nicht direkt für Debi­an ver­füg­bar, sodass man hier etwas trick­sen muss.

Im Down­load­be­reich von uns fin­det ihr die Datei namens „malewaredetect.sh”, die man ein­fach nur down­loa­den und aus­füh­ren („./malewaredetect.sh”) muss. Das Script über­nimmt alles ande­re wie das Her­un­ter­la­den des Pakets, die rich­ti­ge Instal­la­ti­on und was sonst noch anfällt, damit das Paket auf Debi­an läuft.

Mit „/usr/local/maldetect/maldet ‑b ‑a /home/” kann man bei­spiels­wei­se eine kom­plet­te Über­prü­fung des Home-Ord­ners star­ten. Den aktu­el­len Zustand und den Ver­lauf kann man mit „tailf /usr/local/maldetect/event_log” überprüfen.

Auch die Suche hat bei mir nichts erge­ben, sodass ich nicht nur ein­hun­dert pro­zen­tig sicher bin, dass mein Sys­tem sau­ber ist, son­dern etwas mehr. Eigent­lich war es mir schon von Anfang an klar, dass ich nicht der Übel­tä­ter bin/sein kann, aber ein mul­mi­ges Gefühl blieb mir trotzdem.

Zwar hat die Akti­on mich nun vie­le Stun­den gekos­tet, die ich in mei­ner Frei­zeit geop­fert und nicht für den Blog benutzt habe, aber immer­hin habe ich so schon mal vor­ge­sorgt im Zwei­fels­fal­le und die­ser Bei­trag ist sogar dadurch ent­stan­den. Viel­leicht ist die­ser ja frü­her oder spä­ter für irgend­je­mand nütz­lich. Wer weiß.

Anmer­kun­gen zum Bei­trag? Hin­weis an die Redak­ti­on sen­den.