[PHP/IMAP] Controle afzender

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • WaarAnders
  • Registratie: Juni 2001
  • Laatst online: 20-07 21:31
Ik ben bezig met het schrijven van een script om mail toe te voegen aan een database. Het script haalt via imap de mail binnen en checkt vervolgens of de afzender van de mail ook in de database voor komt. Als dit het geval is, dan wordt de mail toegevoegd.

Nu kan je oa met mail() de FROM informatie makkelijk manipuleren. Afzender bill@gates.nl is zo makkelijk te faken. Ik zou dus graag op een andere manier checken of dit bill@gates.nl is. Ik zat zelf te denken aan het checken van de mailserver, maar ten eerste wist niet of dit ook te manipuleren zou zijn en ten tweede hoe creëer ik een match tussen mailserver en mailadres? Ik kan me voorstellen dat als er mensen via gmail/hotmail mailen ze gebruik maken van verschillende mailservers.

Kan iemand me wat verder op weg helpen? (Eventueel met een linkje naar een artikel, want ik heb zelf helaas niks kunnen vinden)

Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 18-09 11:40
Eerst zal je je dus een beetje moeten verdiepen in hoe mailen überhaupt werkt. Allereerst is de misvatting dat het To: adres het adres is waar naartoe een mail wordt gestuurd (geadresseerde) en het From: adres waarvandaan wordt gemaild (afzender), zoals je zelf ook al aangeeft. In werkelijkheid is dat respectievelijk het Evelope-from (ook Sender of Return-path) en het Envelope-to adres.
Checks op basis van of een bepaalde mailserver mail mag versturen met een bijbehorende Envelope-from heet SPF (Sender Policy Framework) checking. Helaas werkt dat maar ik een klein aantal gevallen, omdat daarvoor het domein dat gefaket wordt een SPF record moet hebben dat ook nog eens harde eisen stelt aan de versturende mailserver.
Er zijn nog meer checks om te zien of een mail legitiem is en daarvoor kan je het beste kijken naar welke checks een gemiddelde MTA (mailserver) doet, zoals Exim. Je kan Exim bijvoorbeeld configureren dat ie probeert bij de mailserver van het mogelijk gefakete domein een mail af te leveren (maar in feite dus alleen checkt of het afzenderadres bestaat).

Hoe dan ook, deze checks wil je vast niet zelf gaan uitvoeren. Ik hoop voor je dat de MTA behorende bij dat betreffende IMAP account dat al voor je doet.
Als je gewoon een scriptje wil maken dat de afzender van een mail bepaalt dan moet je kijken naar de regels Envelope-from, From, Sender en Return-path in de headers van een e-mail.
Je loopt dan wel tegen problemen aan wanneer mails zijn geforward of gerelayed zijn volgens het SPF schema (zoals het zou moeten). Dan krijg je Envelope-from adressen met daarin geëncode het oorspronkelijke Envelope-from adres zodat een eventuele bounce bij de oorspronkelijke versturende partij komt en de SPF check niet onnodig faalt. Zo zijn er nog talloze dingen waar je rekening mee moet houden voor je kan zeggen dat een e-mailadres in de mail de werkelijke afzender is. Vaak moet je dat dan zelf interpreteren. Voor heel simpele dingen kan je gewoon het From veld pakken, maar zoals je zelf al zegt, kan je dat eenvoudig faken.
WaarAnders schreef op zondag 18 januari 2009 @ 02:25:
Nu kan je oa met mail() de FROM informatie makkelijk manipuleren. Afzender bill@gates.nl is zo makkelijk te faken. Ik zou dus graag op een andere manier checken of dit bill@gates.nl is.
Indien gates.nl geen SPF record heeft is dat te doen.
WaarAnders schreef op zondag 18 januari 2009 @ 02:25:
Ik zat zelf te denken aan het checken van de mailserver, maar ten eerste wist niet of dit ook te manipuleren zou zijn en ten tweede hoe creëer ik een match tussen mailserver en mailadres?
gates.nl's mailserver is het MX-record dat hoort bij gates.nl:
#host -t mx gates.nl
gates.nl mail is handled by 10 mail.gates.nl.
#host -t a mail.gates.nl
mail.gates.nl has address 94.124.120.73
WaarAnders schreef op zondag 18 januari 2009 @ 02:25:
Ik kan me voorstellen dat als er mensen via gmail/hotmail mailen ze gebruik maken van verschillende mailservers.
Je bedoelt dat mensen mailen met de uitgaande mailserver van hun ISP, bijvoorbeeld smtp.telfort.nl met als Envelope-from user@gmail.com? Dat zal heel vaak worden geweigerd bij de ontvanger, want (voorbeeld gmail):
# host -t txt gmail.com
gmail.com descriptive text "v=spf1 redirect=_spf.google.com"
# host -t txt _spf.google.com
_spf.google.com descriptive text "v=spf1 ip4:216.239.32.0/19 ip4:64.233.160.0/19 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:209.85.128.0/17 ip4:66.102.0.0/20 ip4:74.125.0.0/16 ip4:64.18.0.0/20 ip4:207.126.144.0/20 ?all"

Wat dus geen van alle matcht met het ip adres van smtp.telfort.nl, maar op zich niet direct wordt geweigerd, omdat niet alle andere servers direct worden uitgesloten. Dit geeft doorgaans alleen een kleine score extra in het spamfilter. Maar als het eindigde op -all, dan kan je verwachten dat je mail niet ver komt.
WaarAnders schreef op zondag 18 januari 2009 @ 02:25:
Kan iemand me wat verder op weg helpen? (Eventueel met een linkje naar een artikel, want ik heb zelf helaas niks kunnen vinden)
Lezen, lezen, headers bestuderen, mailservers configureren, googlen... Ach, zo leer je nog eens wat. :) Ik heb het gewoon door de jaren heen geleerd, uit ervaring.

[ Voor 55% gewijzigd door gertvdijk op 18-01-2009 02:57 ]

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

gertvdijk schreef op zondag 18 januari 2009 @ 02:41:
Eerst zal je je dus een beetje moeten verdiepen in hoe mailen überhaupt werkt. Allereerst is de misvatting dat het To: adres het adres is waar naartoe een mail wordt gestuurd (geadresseerde) en het From: adres waarvandaan wordt gemaild (afzender), zoals je zelf ook al aangeeft. In werkelijkheid is dat respectievelijk het Evelope-from (ook Sender of Return-path) en het Envelope-to adres.
Het Return Path is waar een eventuele bounce o.i.d. naar toe moet worden gestuurd. Dit is zeker niet hetzelfde als de afzender (waar een eventuele reply naar toe gaat) Zeker bij nieuwsbrieven zal het return path niet hetzelfde zijn als de afzender (in de From of Envelop-from)


Anyway, het is niet mogelijk om te checken of de afzender die in de mail staat ook de daadwerkelijke afzender is. Daar is geen waterdichte techniek voor die door iedereen wordt gebruikt.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • WaarAnders
  • Registratie: Juni 2001
  • Laatst online: 20-07 21:31
helaas, beide bedankt voor de uitleg!

Voor de mensen die (ongeveer) hetzelfde willen als ik: Ik denk dat ik het op een andere manier ga oplossen. Waarschijnlijk mbv een 2e verificatie in de software zelf of door elke keer een unieke code aan het begin van de mail of subject.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

Heb je controle over de verstuurde berichten? Ga dan de berichten versturen m.b.v. PGP. Dan weet je zeker dat er niet aan het is gerommeld en dat de afzender ook de daadwerkelijke afzender is.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • WaarAnders
  • Registratie: Juni 2001
  • Laatst online: 20-07 21:31
nope, helaas geen controle over de verstuurde berichten. Misschien is het wel een idee om dit in de toekomst te vereisen.
Pagina: 1