อ่านบันทึก VPN ของคุณก่อนส่ง: ทีละฟิลด์
บันทึกการสนับสนุนมีชื่อผู้ใช้ ชื่อใบรับรอง ที่อยู่ภายใน และบางครั้งก็มีกุญแจ เดินดูทีละฟิลด์ ค้นหาความลับ แล้วส่งข้อความตัดตอนที่แก้ไขแล้ว
คุณเปิดตั๋วสนับสนุน แนบไฟล์ส่งออกการวินิจฉัยที่ไคลเอนต์สร้างขึ้น แล้วรอ ไฟล์นี้น่าจะไม่มีประวัติการท่องเว็บเลย ซึ่งเป็นสิ่งที่ทำให้รู้สึกปลอดภัย แต่ก็ยังมีข้อมูลว่าคุณเป็นใคร ใช้เครื่องไหน เข้าถึงที่อยู่ภายในใดและเมื่อใด และบางครั้งก็มีกุญแจส่วนตัวที่ไคลเอนต์ซึ่งบันทึกการกำหนดค่าของตนคัดลอกไว้ การไล่ดูไฟล์ก่อนส่งใช้เวลาประมาณห้านาทีและป้องกันการเปิดเผยถาวร
เปิดมันและอ่านสี่สิบบรรทัดแรก
เริ่มจากด้านบน ซึ่งไคลเอนต์มักเทข้อมูลเวอร์ชัน แพลตฟอร์ม และการกำหนดค่าไว้ บรรทัดแรก ๆ บอกว่าไฟล์ละเอียดแค่ไหน ซึ่งกำหนดว่าคุณต้องสนใจส่วนที่เหลือมากน้อยเพียงใด บันทึกเริ่มต้นและบันทึกดีบักเป็นสิ่งที่แตกต่างกันด้วยการเปิดเผยที่ต่างกัน
head -n 40 vpn-support.log
sed -n '1,40p' vpn-support.log | grep -nE 'version|platform|config|option'
ตรวจขนาดและรูปร่างของไฟล์ก่อนอ่านสิ่งใดจากมัน ไฟล์ข้อความสองเมกะไบต์ที่มีเหตุการณ์เดียวซ้ำ ๆ นั้นตัดให้สั้นได้ง่าย การดักจับแบบไบนารีในโฟลเดอร์เดียวกันเป็นปัญหาคนละเรื่องเลย และต้องคุยกับคนที่ขอไฟล์ส่งออกอีกแบบหนึ่ง
บน Windows สิ่งที่เทียบเท่าคือ cmdlet อย่างละหนึ่งตัว และตัวแรกคุ้มค่าที่จะรันกับไฟล์ใดก็ตามที่คุณไม่ได้สร้างเอง:
Get-Content .\vpn-support.txt -TotalCount 40
Get-Item .\vpn-support.txt | Select-Object Length,LastWriteTime
ฟิลด์ที่ระบุตัวบุคคล
ชื่อผู้ใช้ปรากฏในที่ที่คนไม่คาดคิด: บัญชีที่ใช้ยืนยันตัวตน หัวเรื่องใบรับรอง เส้นทางโปรไฟล์ใต้ไดเรกทอรีบ้าน และชื่อเครื่องซึ่งมักเข้ารหัสชื่อจริง บันทึกที่แก้ไขฟิลด์บัญชีแต่ปล่อยเส้นทางบ้านไว้ไม่แตะต้องไม่ได้แก้ไขอะไรเลย
| Field | What it identifies | Practical treatment |
|---|---|---|
| Account or username | A person, and often an employer | Replace consistently, keep the mapping |
| Certificate subject and CN | Device or user identity | Keep the structure, replace the value |
| Home directory path | A login name, sometimes a full name | Replace the segment, not the whole path |
| Machine or hostname | A person or a physical location | Replace with a stable pseudonym |
ความสม่ำเสมอสำคัญกว่าความครบถ้วนเมื่อวิศวกรสนับสนุนต้องติดตามเซสชันหนึ่งผ่านไฟล์ แทนที่ค่าด้วยป้ายที่มั่นคงแทนการลบ เพื่อให้ทุกการปรากฏของผู้ใช้คนเดียวกันยังอ่านเป็นผู้ใช้คนเดิม การลบฟิลด์ทิ้งทั้งหมดทำให้เส้นด้ายที่วิศวกรต้องการขาด และไม่ได้ทำให้ไฟล์ปลอดภัยขึ้น
การประทับเวลาก็เป็นข้อมูลส่วนบุคคลโดยรวม เวลาเชื่อมต่อของบัญชีเมื่อเก็บทั้งเดือนบ่งบอกชั่วโมงทำงานและการเดินทาง ถ้าคำถามไม่ต้องใช้ช่วงเวลาทั้งหมด ให้ตัดไฟล์ให้เหลือหน้าต่างรอบเหตุการณ์
ฟิลด์ที่ระบุเครือข่าย
ที่อยู่ปลายทาง เส้นทางภายใน และตัวเลือกที่ผลักไปอธิบายรูปร่างของเครือข่ายส่วนตัว นั่นคือข้อมูลที่ผู้โจมตีอยากได้ และมักปรากฏละเอียดกว่าที่ตั๋วต้องการมาก
มองหาตระกูลที่อยู่ที่ใช้อยู่ ไม่ใช่แค่ที่คุณคาดไว้ ไคลเอนต์สองสแต็กอาจบันทึกปลายทาง IPv6 และชุดเส้นทาง IPv6 ที่ไม่มีใครคิดจะแก้ไข เพราะการตรวจสอบมองหาแค่กลุ่มตัวเลขสี่ชุดที่มีจุด
grep -nEo '([0-9]{1,3}\.){3}[0-9]{1,3}' vpn-support.log | sort -u | head -n 40
grep -nEo '([0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}' vpn-support.log | sort -u | head -n 20
รายการที่ไม่ซ้ำคือประเด็น มันบอกว่าไฟล์กล่าวถึงที่อยู่ต่างกันกี่แห่ง ซึ่งมักน้อยกว่าที่รู้สึกตอนเลื่อนมาก ที่ยังให้เช็กลิสต์สำหรับแก้ไขและวิธีพิสูจน์ว่าคุณครอบคลุมทั้งหมด สิบที่อยู่เป็นงานห้านาที และหนึ่งร้อยบอกว่าการส่งออกกว้างกว่าคำถาม
เก็บโทโพโลยีไว้ถ้าวิศวกรต้องการ การแทนที่ออกเท็ตที่สองและสามโดยคงความสัมพันธ์ของซับเน็ตไว้ตอบคำถามได้โดยไม่เปิดเผยช่วงที่อยู่ เคล็ดเดียวกันใช้ได้กับคำนำหน้า IPv6 สิ่งที่วิศวกรต้องการคือรูปร่างของความล้มเหลว และรูปร่างนั้นอยู่รอดหลังการแทนที่ที่สม่ำเสมอ
ความลับซ่อนอยู่ในรูปแบบ ไม่ใช่ในป้ายชื่อ
กุญแจส่วนตัวไม่จำเป็นต้องมีคำว่า “password” อยู่ใกล้ ๆ มันปรากฏเป็นบล็อกระหว่างบรรทัดเครื่องหมาย เป็นสตริง base64 ยาว หรือเป็นการถ่ายการกำหนดค่าแบบอินไลน์ โทเคนปรากฏเป็นพารามิเตอร์คิวรี และข้อมูลรับรองปรากฏใน URL ที่ไคลเอนต์บันทึกไว้ตามตัวอักษร
grep -nE 'BEGIN [A-Z ]*PRIVATE KEY|password|passwd|token|secret|psk|auth-user-pass' vpn-support.log
grep -nE 'https?://[^ ]*:[^ ]*@' vpn-support.log
รูปแบบที่สองคือสิ่งที่คนลืม URL รูปแบบสคีมา ผู้ใช้ รหัสผ่าน โฮสต์ คือข้อมูลรับรองที่สมบูรณ์ และไคลเอนต์บันทึก URL เช่นนั้นทุกครั้งที่มีการกำหนดค่าพร็อกซีหรือฟีดด้วยการยืนยันตัวตนแบบอินไลน์
อย่าส่งไฟล์ต้นฉบับเป็นหลักฐานว่าคุณไม่ได้แก้ไขมัน ถ้าผู้ดูแลยืนยันต้องการการส่งออกที่ไม่เปลี่ยนแปลง ให้ถามว่าเขาเอาไปทำอะไร ส่งผ่านช่องทางสนับสนุนที่ยืนยันแล้วของเขา แล้วลบสำเนาในเครื่องของคุณทิ้ง คำขอนั้นชอบด้วยเหตุผล แต่การวางสาธารณะไม่ใช่
สร้างสำเนาที่แก้ไขแล้วและส่งข้อความตัดตอน
ทำงานบนสำเนา เก็บต้นฉบับไว้ในที่ปลอดภัย และแก้ไขด้วยคำสั่งที่ทำซ้ำได้แทนการใช้มือ การกวาดรูปแบบที่อยู่รอบเดียวจับได้ส่วนใหญ่:
cp vpn-support.log vpn-support.original.log
sed -E 's/([0-9]{1,3}\.){3}[0-9]{1,3}/ADDR/g; s/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/USER@DOMAIN/g' \
vpn-support.original.log > vpn-support.redacted.log
grep -cE 'PRIVATE KEY|password|token' vpn-support.redacted.log
จำนวนสุดท้ายควรเป็นศูนย์ ถ้าไม่ใช่ แสดงว่าการแก้ไขพลาดรูปแบบหนึ่ง และคุณควรดูบรรทัดเหล่านั้นก่อนส่งอะไร อ่านไฟล์ที่แก้ไขแล้วด้วยตาของคุณเองสักครั้งด้วย สคริปต์จับรูปแบบ ไม่ใช่บริบท
ส่งข้อความตัดตอนที่เล็กที่สุดที่ยังแสดงความล้มเหลว สิบบรรทัดรอบข้อผิดพลาดมักเพียงพอ และตรวจทานได้ง่ายกว่าไฟล์สองเมกะไบต์มาก จากนั้นเก็บการจับคู่ระหว่างป้ายของคุณกับค่าจริงไว้ในที่ที่คุณควบคุม เพราะคำถามติดตามจะต้องใช้มัน
เอกสารการบันทึกของ OpenVPN อธิบายว่าระดับความละเอียดเปลี่ยนสิ่งที่บันทึกไว้อย่างไร ซึ่งเป็นบริบทที่มีประโยชน์ในการตัดสินว่าไฟล์ส่วนไหนที่ปัญหาต้องการจริง ๆ