We've moved!

My blog had its new home.

Like I said before, this blog is not really official. Now that I got a new server, I'm going WordPress.

You can find me at http://lunaticneko.com/blog for the new blog. Thanks for bearing with my many blog moves.

This one will remain up in case I need to scavenge old data and/or there are more people led through the old link. I hope I don't lose too much PageRank for this...

Thank you very much,
LunaticNeko.

2007-05-15

Forensics: แกะรอยอีเมล์?

WARNING: บทความ (อะไรก็ไม่รู้) นี้อาจมีเนื้อหาที่คล้ายการส่งเสริมการกระทำผิดกฎหมายหรือข้อบังคับของบ้านเมือง ซึ่งผู้เขียนไม่สนับสนนให้ผู้อ่านกระทำตาม บทความนี้มีไว้เพื่อการศึกษาเท่านั้น -- end warning

เคยสงสัยกันไหมครับว่า อีเมล์ที่คนนั้นคนนี้ส่งมา เขาส่งกันมาจากไหน ส่งกันได้ยังไง บางที เราได้เมล์จากใครก็ไม่รู้ หรือต้องการ (เจือก) อะไรบางอย่างจากจดหมายแต่ละฉบับ จริงๆ มันทำได้ครับ แต่บอกนิดเดียวก็แล้วกัน

หลักการเบื้องต้น: คิดว่ามันเป็นจดหมายธรรมดา โดยให้ผู้ส่งหย่อนใส่ตู้ ให้ไปรษณีย์เป็น Mail Server (SMTP) ให้ ตู้ ปณ ฝั่งผู้รับเป็น Mail Server อีกตัว (POP/IMAP ฝั่งผู้รับ) (ต้องเป็น ปณ นะครับ ไปรษณีย์ธรรมดามันไม่ได้มโณภาพ จริงๆ นะ)

เวลาเราส่งจดหมาย เราไม่ได้ส่งไปแต่จดหมาย แต่เราส่งข้อมูลเกี่ยวกับจดหมายไปด้วย (เช่น ชื่อผู้ส่ง จ่าหน้าถึงใคร วงเล็บมุมซองว่าอะไร ติดสแตมป์กี่บาท (เกี่ยวมั้ย =__=") ส่งเมื่อไหร่ (ปั๊มจากไปรษณีย์) ) เป็นต้น ใครไม่เคยเห็นจดหมาย (ผมเชื่อว่ามันต้องมี ไม่เป็นไรครับ เกิดมาผมส่งจดหมายไม่ถึงสิบฉบับตามที่โรงเรียนสั่ง และได้รับแต่พัสดุตามที่สั่งรับไว้) ก็ลองไปขอจากครูหรืออาจารย์ที่มีอายุหน่อยนึง หรือเปิดหนังสือเรียนภาษาไทยดูได้ครับ (ผมมั่นใจว่ามันมีแน่ๆ) จะได้เข้าใจตรงกัน

เอาละพอแล้ว ตรูเขียนเรื่อง Email นิ ไม่ใช่ สปช หรือ หลักภาษาไทย ซะหน่อย =__="

เอาเป็นว่า เวลาที่เราส่ง Email ออกไป (ผ่าน SMTP Server หรือตู้ไปรษณีย์) (สังเกตนะครับว่าจริงๆ แล้วเราไม่ต้องมี email account ก็ส่งได้) เราจะส่งข้อความเหล่านี้ออกไปให้กับ SMTP Server เป็นพื้นฐานสุดครับ ตัวอย่างคำสั่ง SMTP (ใสโดย "Win-Start" -> Run -> CMD -> "telnet <server> <smtp port>" แต่ต้องไปหา Mail Server มาลงก่อนนะครับ)

ตัวอย่างนี้คือ ผมส่งข้อความทดสอบ (นี่มันไม่ได้ทดสอบแล้วละ) ไปให้ "kyon" ที่เป็นสมาชิกของ "localhost" (ถ้าชื่อใครมันคุ้นๆ ก็อย่าว่ากันนะครับ)

HELO localhost
MAIL From:<admin@thaimodz.net>
RCPT To:<kyon@localhost>
DATA
Subject: About your Folder
Haruhi has known about your... secret... folder about Mikuru. Please be aware around both of them.
.
QUIT

ครับ แค่นี้เราก็ส่งอีเมล์ได้แล้ว สังเกตบรรทัด MAIL From: นะครับ จริงๆ ผมจะใส่เป็นชื่อใครก็ได้ จะ DSI คมช ฯลฯ ได้หมดครับ (แต่เขาจะเชื่อหรือไม่ก็อีกเรื่องนึง)

สังเกตว่า กว่าผมจะได้เขียนจดหมายจริงๆ ก็ต้องลงชื่อผู้ส่งและจ่าหน้าซองก่อน พอเขียนเสร็จก็ต้องใส่ซองติดแสตมป์ให้เรียบร้อย (สังเกตตัว . (จุด) ให้ดีครับ เป็นคำสั่ง "เลิกเขียนจดหมาย" ของ SMTP) บรรทัดก่อนนั้นใช้เป็นข้อมูลของจดหมายทั้งสิ้น

คราวนี้เรามาดูที่ฝั่งผู้รับ ผมใช้โปรแกรม James ในการรัน Mail Server (เป็น Java) จึงได้เนื้อหามาแบบนี้ครับ โดยอันนี้ไป "งัดแงะ" มาจากคลังไฟล์โดยตรง

Return-Path: <admin@thaimodz.net>
Received: from localhost ([127.0.0.1])
by thaimodz (JAMES SMTP Server 2.2.0) with SMTP ID 11
for <kyon@localhost>;
Thu, 10 May 2007 08:58:56 +0700 (ICT)
Subject:555
Date: Thu, 10 May 2007 08:58:56 +0700 (ICT)
From: admin@thaimodz.net
Delivered-To: kyon@localhost
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset=Cp1252
Mime-Version: 1.0
Message-ID: <31131058.1178762370671.javamail.thaimodz@thaimodz>

Haruhi has known about your... secret... folder about Mikuru. Please be aware around both of them.

ลองสังเกตดูก็จะเห็นว่า ทาง James (ชื่อ Mail Server) ได้เพิ่มหัวจดหมายไปเยอะพอสมควร หากตั้งใจอ่านดูดีๆ ก็จะเห็นถึง ชื่อ Mail Server ที่ส่งออกมา (กรณีนี้ loopback อยู่ในเครื่องตัวเอง จึงเป็น Localhost) และชื่อผู้ส่งยังไปตกใน reply-to อีกด้วย ซึ่งจะถูกใช้เมื่อมีการตอบอีเมล์นี้

แน่นอน ข้อมูลที่เราย่อมสนใจคือ ผู้ส่งอยู่ที่ไหน แต่ James ก็ใส่มาเพียงแค่เวลา กับ Time Zone เท่านั้น ซึ่งจัดว่าคลุมเครือมากสำหรับการส่งอีเมล์ ทีนี้ผมจะให้ดูหัวแบบ X-header บางส่วนที่นำมาจาก Inbox บ้างครับ (ปรุงแต่งเพื่อรักษาสิทธิส่วนบุคคลแล้ว เนื่องจากหยิบของเพื่อนมา)

X-Originating-IP: [158.108.XXX.XXX]
X-Originating-Email: [undisclosed_name@some-mail-server.com]

สังเกต บรรทัด X-originating-IP ซึ่ง Mail Server แห่งหนึ่งได้ "ยัด" มาให้ด้วย อ่านเอาก็รู้ว่านี่คือการเก็บ Log ของ Mail Server ที่ส่งออกมาแน่นอนโดยไม่ต้องสงสัย ก็ไป Map หรือ Tracert หาเองนะครับว่าเมล์ของท่านน่ะ มันมาจากไหน?

(ว่ามันส่งมาจาก ม.เกษตร แต่... เอ่อ ช่างเหอะ เรื่องส่วนตัวห้ามปนกับเรื่องงาน เออน่า ไม่ใช่แฟนหรอก =__=")

เอาละ สรุปว่า เราไม่สามารถตรวจหาแหล่งที่มาได้ชัดเจน จนกว่า... (เรียงตามความละเอียด น้อยไปมาก)

1. เราได้ข้อมูลจาก Header
2. เรามีข้อมูลมากพอ เช่น สำนวน ภาษา เวลาที่ส่ง Time Zone หรือแม้กระทั่ง IP ของ SMTP Server
3. SMTP Server "ใจดี" ส่ง Originating IP มาให้ด้วย (แม้ไม่ใช่บริษัทเครือข่ายมือถือก็ตาม)
4. เราสามารถเข้าไปอ่าน Access Logs แล้วตาม IP Address กลับไปได้ (ไว้เขียนวันหลังนะครับ)


DEDICATION:
ให้ท่าน "ผู้จัดการ" ที่สงสัยเกี่ยวกับระบบอีเมล์อย่างแรง จนป๋มเกิดแรงบันดาลใจเขียนไอ้ข้อความอะไรก็ไม่รู้นี่ขึ้นมา!!!


.... อ้อ นี่คือภาคต่อของจดหมายฉบับนั้นครับ!! (คิดซะว่าเป็น exercise ละกัน)
(DISCLAIMER: เนื้อหานี้เพื่อความสะใจส่วนบุคคล ไม่มีส่วนเกี่ยวข้องกับองค์กร บุคคล โรงเรียน หรือ "พระเจ้า" ใดๆ ทั้งสิ้นเด็ดขาด!)
Return-Path: <suzumiya_haruhi@sosdan.northhigh.ac.jp>
Received: from localhost ([127.0.0.1])
by thaimodz (JAMES SMTP Server 2.2.0) with SMTP ID 291
for <kyon@localhost>;
Tue, 15 May 2007 23:41:28 +0700 (ICT)
Subject:Die Kyon DIE!!!
You think that agent you hired could protect you and your filthy actions from the god like me? WRONG! Now you wait there and prepare yourself for CAPITAL PUNISHMENT!
Date: Tue, 15 May 2007 23:41:28 +0700 (ICT)
From: suzumiya_haruhi@sosdan.northhigh.ac.jp
Delivered-To: kyon@localhost
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0
Message-ID: <24569170.1179247304968.javamail.thaimodz@thaimodz>
บายจ้า~! ^__^

No comments:

Post a Comment