วันนี้จะออกนอกเรื่อง DIY สักหน่อย ไปทาง IT security คือเรื่องของเรื่องผมโดนอีเมลปลอมจากธนาคารส่งมา (อ่านเรื่องราวเต็มๆ ได้ใน กระทู้ pantip ผมไปแชร์ไว้ในนั้น ไม่อยากลงซ้ำ) คือจริงๆ มันไม่ใช่เรื่องแปลกอะไร มีมาตั้งนานแล้ว แต่คราวนี้มันพิเศษกว่าทุกที มันปลอมแม้กระทั่ง from email address!

ลองดูภาพข้างล่าง สังเกตว่า from address คือ [email protected] ถูกต้องเป๊ะๆ เลย

scb email ปลอม

โพสนี้จะอธิบายว่าทำไมเค้าถึงปลอมได้ (คำเตือน: โพสนี้ Technical มาก เหมาะสำหรับคนที่เรียนมาทางด้าน Computer Science)

จริงๆ แล้วอีเมล address เนี่ยปลอมได้ไม่ยาก นึกถึงเวลาเราเขียนจดหมาย ใครก็สามารถทำจดหมายปลอม ปริ้นโลโก้ธนาคารบนหัวจดหมายแล้วส่งได้เหมือนกัน ดังนั้นจึงได้มีคนคิดวิธีขึ้นมาเพื่อตรวจสอบว่าเมลไหนเจ้าตัวส่งมาจริง เมลไหนถูกปลอมขึ้นมา วิธีเช็คหลักๆ จะมี 2 วิธีคือแบบ SPF และแบบ DKIM

SPF

ย่อมาจาก Sender Policy Framework หลักการก็คือ เป็นการระบุว่า server ไหนเป็นผู้มีสิทธิในการส่งอีเมลให้กับโดเมนของเรา ถ้าอีเมลไหนถูกส่งมาจาก server ที่ไม่ได้อยู่ใน list ที่เจ้าของโดเมนกำหนดไว้ ให้ถือว่าไม่ผ่าน SPF Check

การใช้งานก็คือ เจ้าของโดเมนจะต้องสร้าง DNS record แบบ SPF เพื่อระบุ list ของ server ซึ่งเมื่อผมเช็ค SPF record ของ scb.co.th ก็จะได้ตามนี้

SPF อีเมล คืออะไร

นั่นก็คือ เมลไหรที่พวกผู้ให้บริการอีเมลเช่น Outlook หรือ Gmail เจออีเมลที่มี From Address มาจาก scb.co.th แต่ไม่ได้ถูกส่งมาจาก IP Address ที่อยู่ใน SPF record ข้างบนละก็ จะถือว่า SPF Check Fail นั่นเอง

อย่างไรก็ตามการเช็ค SPF ก็ยังถือว่ามีช่องโหว่ เพราะมันเป็นการเช็คระดับโดเมน ไม่ได้เช็คระดับ mail จึงได้มีวิธีเช็คอีกขั้นที่ชัวร์กว่าคือ DKIM

DKIM

ย่อมาจาก Domain Key Identified Mail ใช้หลักการยืนยันตัวตน (Authentication) ร่วมกับ Public-Private Key ก็คือ ส่งข้อความบางส่วนที่เข้ารหัสไว้ด้วย Private Key แนบไปกับ Header ของอีเมลด้วย จากนั้นเอา Public Key วางไว้บน DNS Record ซึ่งผู้รับอีเมลสามารถเช็คข้อความที่เข้ารหัสไว้ด้วย Private Key ด้วย Public Key ถ้าสามารถ Decrypt ได้แปลว่าอีเมลมาจากผู้ส่งตัวจริง ถ้าไม่ได้ให้ถือว่า DKIM Fail

วิธีนี้แน่นอนกว่า SPF เพราะเป็นการเช็คระดับ Email และการปลอม Key สามารถทำได้ยากกว่า ภาพข้างล่างคือตัวอย่าง Public Key ของ scb.co.th

dkim ตัวอย่าง

แต่ทีนี้พอมาดูไอ้อีเมลที่ส่งมาหาผมเนี่ย มันไม่ผ่านทั้ง SPF และ DKIM เลย สรุปก็คือปลอม 100%

scb อีเมล ปลอม

แล้วทำไมอีเมลปลอมแบบนี้ มันไม่ถูก reject ออกไปเลยเพื่อป้องกันความสับสนละ คำตอบก็คือ scb.co.th ไม่ได้ตั้ง DMARC Policy ไว้

DMARC

ย่อมาจาก Domain-based Message Authentication, Reporting & Conformance (ยาวจัง)

มันคือการระบุ Policy ของโดเมนเราว่า จะให้จัดการยังไงกับอีเมลที่ไม่ผ่านการเช็ค SPF และ DKIM เช่น ถ้าไม่ผ่าน ให้ reject ทิ้งไปเลย หรือให้ไปลง Junk Folder ของผู้รับ หรือไม่ต้องทำอะไร ให้เข้าไปอยู่ใน Inbox

วิธีการใช้งานก็คล้ายๆ SPF และ DKIM คือสร้าง DNS Record แบบ DMARC ภาพข้างล่างคือตัวอย่างของ Paypal จะเห็นว่าเค้ามี Policy ให้ reject ทุกเมลที่ไม่ผ่านการเช็ค

dmarc ตัวอย่าง

ในขณะที่ scb.co.th นั้นไม่ได้ระบุ DMARC Policy ไว้

dmarc ตัวอย่าง

ซึ่งเมื่อไม่มี ทำให้เมื่อ Outlook หรือ Gmail เจอเมลที่ไม่ผ่านการเช็ค SPF/DKIM ก็จะไม่กล้า reject แต่ส่งมันไปลง Junk Folder แทนนั่นเอง

Note: จริงๆ แล้วนี่เป็นการอธิบายแบบหยาบๆ DMARC จริงๆ มีขั้นตอนที่ละเอียดกว่านี้ หรือที่เรียกกันว่า DMARC Alignment แต่ขอละไว้

สรุป

from address บน Email สามารถปลอมได้ไม่ยากเลย ยิ่งถ้าเจ้าของโดเมนไม่ประกาศ SPF และใช้ DKIM แล้วจะถูกปลอมได้ง่ายใหญ่ อย่าคลิก link อะไรก็ตามที่อยู่ในอีเมล ถ้าไม่ไว้ใจจริงๆ อีเมลโดยเฉพาะเวลามันอยู่ใน Junk Folder ให้สงสัยไว้ก่อนเลยว่ามันปลอม

อย่าลืมติดตามบทความจากบล็อกนี้จากได้ทาง Facebook Page บล็อกนายช่าง และกด Like กด Share เพื่อเป็นกำลังใจให้ผมมีแรงทำบล็อกนี้ต่อไปด้วยนะครับ