คุณเปิดตั๋วสนับสนุน แนบไฟล์ส่งออกการวินิจฉัยที่ไคลเอนต์สร้างขึ้น แล้วรอ ไฟล์นี้น่าจะไม่มีประวัติการท่องเว็บเลย ซึ่งเป็นสิ่งที่ทำให้รู้สึกปลอดภัย แต่ก็ยังมีข้อมูลว่าคุณเป็นใคร ใช้เครื่องไหน เข้าถึงที่อยู่ภายในใดและเมื่อใด และบางครั้งก็มีกุญแจส่วนตัวที่ไคลเอนต์ซึ่งบันทึกการกำหนดค่าของตนคัดลอกไว้ การไล่ดูไฟล์ก่อนส่งใช้เวลาประมาณห้านาทีและป้องกันการเปิดเผยถาวร

เปิดมันและอ่านสี่สิบบรรทัดแรก

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

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

ฟิลด์ที่ระบุตัวบุคคล

ชื่อผู้ใช้ปรากฏในที่ที่คนไม่คาดคิด: บัญชีที่ใช้ยืนยันตัวตน หัวเรื่องใบรับรอง เส้นทางโปรไฟล์ใต้ไดเรกทอรีบ้าน และชื่อเครื่องซึ่งมักเข้ารหัสชื่อจริง บันทึกที่แก้ไขฟิลด์บัญชีแต่ปล่อยเส้นทางบ้านไว้ไม่แตะต้องไม่ได้แก้ไขอะไรเลย

FieldWhat it identifiesPractical treatment
Account or usernameA person, and often an employerReplace consistently, keep the mapping
Certificate subject and CNDevice or user identityKeep the structure, replace the value
Home directory pathA login name, sometimes a full nameReplace the segment, not the whole path
Machine or hostnameA person or a physical locationReplace 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 อธิบายว่าระดับความละเอียดเปลี่ยนสิ่งที่บันทึกไว้อย่างไร ซึ่งเป็นบริบทที่มีประโยชน์ในการตัดสินว่าไฟล์ส่วนไหนที่ปัญหาต้องการจริง ๆ

บทความที่เกี่ยวข้อง