Kdo mi cmare do souboru ?

Dan Lukes dan at obluda.cz
Tue May 26 07:45:58 CEST 2020


Zareaguju takhle v jednom emailu na vsechny tri dopisy, at toho 
konferenci nelita moc.

> Problém nastáva pri ukončení spojenia na klienta, vtedy deamom (a nie 
> hneď) zapíše do mailoxu čo s nim robil (aj len pri čítaní zapisuje 
> príznak čítania)
> a ak sú dva deamony tak si mailbox navzájom prepisujú.  Zrejme 
> programátori nepredpokladali rôzne deamony (aj od roznych výrobcov) do 
> jedného mailboxu.

Novy email muze prijit kdykoliv. Bez zamkovani (ci jineho rizeni 
pristupu k souboru) by to neslo, a IMAP-UW zamyka.

Problem sice nejak s konkurencnim pristupem souvisi, ale nejak 
netricialne. Zapsany binarni bordel byl identifikovan jako segment SSL 
komunikace. K datum v tyhle podobe aplikace obvykle pristup nema a 
nemuze je tedy "prostou chybou" zapsat. Pri "proste" chybe zamkovani by 
si to sice prepisovali, ale porad "formatove korektnimi" daty.

Odhad "naslepo" je, ze (zrejme pri reseni zamkovani) aplikace uzavre 
deskriptor sitoveho spojeni standardnim systemovym close() - nikoliv 
volanim SSL funkce. Nasledne aplikace otevre maillbox a system ji vrati 
volny deskriptor - ten, co byl prave uvolnen, tedy ten, ktery si SSL 
knihovna stale drzi v internich datech jako deskriptor otevreneho SSL 
spojeni. No a nekdy pozdeji do nej ta knihovna zapise.

> riadiaci blok v maiboxe ... imap-uw ho robí binárny. 

Do textoveho MBOXu nemuze a imap-uw to nedela. To by tam MTA uz nemusel 
byt schopen pridat dalsi email. V tomhle problem neni, do textoveho MBOX 
souboru IMAP-UW dava data textove.

> napadl mne prográmek inotifywait, který používám. Nicméně ten dokáže
> odchytit jen patřičnou změnu (vytvoření/update) nějakého souboru.
> Jak ale zjistit, kdo do něj zrovna zapisuje - možná hned zkusit zavolat lsof
> či něco podobného, třeba se to stihne a něco prozradí.

Sice rikam, ze nejdriv potrebuju zjistit kdo a pak teprve hledat proc, 
ale nakonec to druhy budu stejne potrebovat, takze stejne budu 
potrebovat chytit ten konkretni zapis, abych sestrelil to co ho dela a 
nasledne v coredumpu hledat co se delo a jak tomu napriste zabranit.

Pokud prijdu na to jak udelat tohle, nejspis to pujde pouzit i pro 
detekci "kdo".

Ja vim jak to v nejhorsim vyresit. Proste budu muset patchnout libc nebo 
kernel a u zapisu zkontrolovat, jestli nezapisuju na pozici nula 
sledovaneho souboru nezadouci blbosti. A pokud ano, tak to sestrelit. 
Ale potrebna uprava neni uplne trivialni a strasne se mi do toho nechce. 
  Doufal jsem, ze existuje neco hotovyho nebo prinejmensim snadneji 
upravitelnyho. Treba v ramci auditingu, o kterym moc nevim co umi.

> pro IMAP / POP3 server bych z vlastni zkusenosti doporucil Dovecot
Zatim se mi nechtelo ho zkoumat. Na to co potrebuju je zbytecne 
komplexni. Mozna me ale situace nakonec donuti.

Kazdopadne diky vsem za napady, pokdu byste jeste na neco narazili, 
klidne dejte vedet, jestli se fakt budu muset hrabat v kernelu, tak to 
mi bude jeste nejakou dobu trvat, nez se do toho dokopu ...

Dan




More information about the Users-l mailing list