เมื่อข้อมูลบัตรเครดิตถูกขโมยไปใช้ทำอย่างไร

เมื่อหลายวันก่อน ถูกนำข้อมูลบัตรเครดิตไปซื้อสินค้า-บริการแปลก ๆ บน APPLE.COM จำนวน 2 ยอดในเวลา 2 นาที จำนวนเงิน 3,000 บาท แต่ยังโชคดีที่บัตรเครดิตดังกล่าว มีบริการแจ้งเตือนผ่านแอปว่ามีการซื้อสินค้า-บริการแทบจะทันที ทำให้เราทราบยอดหลังจากถูกใช้งานไปแล้วไม่นาน (หลักนาที)

พอผมเห็นยอดที่ไม่ได้ใช้งานโผล่มา ก็หงุดหงิดปนงง ๆ เพราะเป็นคนใช้งานบัตรเครดิตอย่างระมัดระวังอย่างมาก ทั้งปิดบัตรเลข CVV ด้วยการติดสติ๊กเกอร์ void หรือปิดบังเดือน-ปี หมดอายุของบัตรอย่างดี แต่เอาหล่ะ โดนเข้าให้แล้วก็ต้องแก้ปัญหา

เริ่มด้วยโทรหา Call Center ของบัตรเครดิตยี่ห้อนั้น เพื่อทำแจ้งอายัดบัตร ออกบัตรใหม่ เจ้าหน้าที่แจ้งขั้นตอน และส่งเอกสารเพื่อยกเลิกยอดการใช้งานดังกล่าวทันที คือวางสายแล้วไม่เกิน 5 นาที เอกสาร PDF มาถึงอีเมลที่แจ้งกับธนาคารผู้ออกบัตรไว้ พอได้เอกสารดังกล่าว พิมพ์ และกรอกข้อมูลตามเอกสาร แสกนส่งอีเมลที่ระบุในเอกสาร ซึ่งรอ 3 วันทำการ

หลังจากขั้นตอนเอกสารกับธนาคารจบ ก็เข้า Apple support ซึ่งเป็นผู้ตัดยอดเงินดังกล่าว (ถ้าเป็นบริษัทอื่น ๆ ลองหาช่องทางอีกที) โดย Apple มีบริการ support แบบจองคิวแล้วให้ Apple ติดต่อกลับทางโทรศัพท์ ซึ่งผมทำเรื่องจองคิว พอตามนัดหมายที่นัดไว้ Apple ก็โทรศัพท์มา ปลายสายเป็นพนักงานคนไทยพูดสาย ก็แจ้งข้อมูลต่าง ๆ เพื่อตรวจสอบยอดเงิน พร้อมเวลาทำธุรกรรมเพื่อให้หวังให้ทาง Apple ทำการยกเลิกธุรกรรม และไม่เรียกเก็บธุรกรรมดังกล่าว ซึ่ง Apple ตรวจสอบยอดว่ามียอดนี้อยู่จริง และทำการ verify บัญชีว่าเรามี Apple ID และเราไม่ได้ใช้บัตรดังกล่าวในระบบของ Apple ผ่าน Apple ID ใด ๆ ก่อนหน้านี้ โดยจากการตรวจสอบทั้งหมด Apple ก็ทำการยกเลิกธุรกรรม โดยทาง Apple แจ้งว่าภายใน 48 ชั่วโมงยอดเงินที่ตัดไปควรจะกลับเข้าบัตรตามเดิม แต่อย่างไรก็ตามแนะนำให้ตรวจสอบกับทางธนาคารเจ้าของบัตรอีกครั้ง

หลังจากทำเรื่องทั้งต้นทาง และปลายทางแล้วสัก 2 วันทำการ ทางผมก็ได้ SMS แจ้งจากธนาคารผู้ออกบัตรว่าเอกสารเข้าสู่ขั้นตอนตรวจสอบเอกสารแล้ว

หลังจากวันที่โดนขโมยข้อมูลบัตรไปใช้งาน 4 วัน ทางธนาคารโทรมาแจ้งว่าทาง Apple คืนยอดเงินกลับมา และทางธนาคารยืนยันยอด เราสามารถตรวจสอบผ่านแอปของธนาคารได้ว่ายอดเงินกลับเข้าบัตรแล้ว พร้อมทั้งแจ้งบัตรใหม่ได้ถูกส่งออกมาแล้วและให้รอรับบัตรใหม่

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

โดยจากทั้งหมดที่กล่าวมา ผมค่อนข้างโชคดีที่โดนกับบัตรเครดิตที่มีแอปแจ้งเตือนแทบจะทันทีที่มีการตัดเงินเข้ามาในบัตร ทำให้แก้ไขปํญหาได้เร็ว ถ้าไปเจอบัตรบางใบที่กว่าจะรู้ตัวยอดก็เรียกเก็บเข้าบัตรแล้ว 3-4 วันหลังจากโดน หรือซวยหนักกว่านั้นคือจัดยอดเงินระหว่างเดือนไปแล้ว ไม่รู้จะเรื่องยาวกว่านี้ไหม

ปรับให้ anti-brute force attacks ทำงานร่วมกับ CloudFlare

เวลาเอา web ไปไว้หลัง CloudFlare ปัญหานึงคือ IP ของ client จะส่งเข้ามายังเครื่อง server เป็น IP ของ CloudFlare ทำให้เราตรวจสอบลำบากว่าใครเข้ามา (รวมไปถึงการเก็บ access log เพื่อทำตาม พรบ คอมพิวเตอร์)

ปัญหาต่อมาคือเวลาเรา implement ตัวป้องกัน brute force attacks เรามักจะทำได้ยาก

วิธีหนึ่งที่ทำกันคือ ย้ายการเก็บข้อมูลของ IP มาดูที่ HTTP header ชื่อ X-Forwarded-For และ CF-Connecting-IP แทน ซึ่งก็โอเคดี แต่ก็ไม่ได้สะดวกมากเท่าแบบเดิมๆ คือเรียกจาก REMOTE_ADDR ตรงๆ เพราะพวก brute force attacks จะไปโฟกัสที่ header REMOTE_ADDR เป็นหลัก

วิธีการแก้ไขคือ ติดตั้ง mod_cloudflare สำหรับ Apache หรือ ngx_http_realip_module ใน nginx เป็นต้น แล้วตั้งค่าตาม link นี้ Restoring original visitor IPs: Logging visitor IP addresses

เสร็จแล้วติดตั้ง anti-brute force attacks อย่าง mod_evasive บน Apache หรือ ngx_http_limit_req_module บน nginx ก็จะช่วยป้องกัน brute force attacks ได้ในระดับหนึ่ง

ปล. เหตุผลที่ต้องทำเพิ่มเติมจาก CloudFlare แม้ระบบ CloudFlare จะช่วยป้องกันได้ในระดับนึงก็คือ บางครั้งโดนยิงจนดับไปแล้ว CloudFlare มันเพิ่งมาช่วย ก็เลยเป็นที่มาของการป้องกันตัวเองในเบื้องต้นด้วย

เรื่องเล่า myujikkii.com และ music48voter.com ฉบับปี 2020

สำหรับเว็บ music48voter.com ตัวเว็บใช้บริการ DigitalOcean ด้วยเหตุผลการเข้าถึงได้ดีจากนอกประเทศ ราคาไม่แพง รวมทั้ง 6 อย่างที่เห็น จ่ายเดือนละ 30USD โดยให้ B/W ค่อนข้างเยอะ สเปคก็ค่อนข้างดี เร็วใช้ได้ (ปีก่อนมีปัญหา ตปท เข้าได้ยาก เพราะระบบอยู่ในไทย)

ใช้ VM จำนวน 4 ตัว เป็น LBx1 (HAProxy), Webx2 (docker-compose),DBx1 (MariaDB+Redis) ส่วนไฟล์สลิปไปฝากที่บริการ Spaces คล้ายๆ S3 ของ AWS เก็บแยกไปต่างหาก

เว็บพัฒนาบน .NET Core 3.1 (C#) ต่อยอดจากปีก่อน (ปีที่แล้ว .NET Core 2.0) docker image build บน Docker Hub
เหตุผลที่มี Webx2 เพราะกลัว deploy แก้ไขจะได้ไม่ล่มแบบปีก่อน ทำ auto deploy ร่วมด้วย (ปีก่อนแก้หรือ deploy แล้วเว็บจะ down แป็บนึง เพราะ start/stop Kestrel manual) และเหตุผลที่ไม่ใช้ K8s เพราะเครื่องมันจะเยอะขึ้นอีกตัว บวกกับขี้เกียจ (จบ ?)

myujikkii.com อันนี้อีกทีมนึงทำ ซึ่งด้านการ sync ยอด progress ดึงจาก music48voter อีกที (cache 5 นาที) ทีม myujikkii ก็จะได้ไม่ปวดหัวกับระบบหลังบ้าน เลยรวมที่เดียว และ myujikkii เอา cloudflare ทำ proxy cache ด้วยเพื่อให้โหลดเร็วขึ้นประหยัด B/W

ระบบหลังบ้านในการตรวจสลิป มีทีมตรวจแล้วแจ้งสถานะ approve/reject แล้วส่งอีเมลแจ้งสมาชิกในเว็บ (ปีก่อนไม่มีอีเมลแจ้ง) ถือว่าโอเค เพราะทีมหลังบ้านไม่ต้องคอยแจ้งหรือลุ้นว่าเค้าจะกลับมาแก้ไขไหม และทำให้ทีมงานเช็คยอดง่ายขึ้น (ตัวอีเมลใช้บริการ mailgun ส่งอีเมลฟรี 5,000 ฉบับ)

ส่วนฝั่งโค้ดโหวตก็เหมือนปีก่อน และสุดท้าย last word ตอนแรกจะใช้ Google Form แต่คิดว่าลำบากตรงเอาข้อความมาแปะ และตรวจยอด เลยเขียนเพิ่มให้ทีมงานบริการจัดการได้จากจุดเดียว โดยข้อมูลโดเนทและข้อความก็อยู่ฐานข้อมูลเดียวกันทั้งหมด เอาเวลาไปโฟกัสเรื่องยอดกับบิ้วโหวตดีกว่า

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

หวังว่าจะสนุกกับกิจกรรมของทีมงานที่ทำกันทุกคน ^^

DNS Propagation Check

เจอปัญหาว่าตอนเช็ค domain ที่ดูแล ว่าตอน client ไป resolve กับ DNS resolver เจ้าต่าง ๆ ได้ผลตอบกลับออกมาเป็น IP อะไรบ้าง เพื่อตรวจสอบว่าแต่ละ DNS resolver เข้าที่ CDN/Server ชุดไหน (ถ้ามีหลายเครื่อง) หรือตรวจสอบว่าเป็นข้อมูลล่าสุดแล้วหรือยัง

หากตรวจสอบแค่ 1-2 ISP หรือ Public DNS หลัก ๆ ก็ไม่ยาก แต่ถ้าเยอะ ๆ สัก 4-5 ตัวขึ้นไป ก็จะลำบากแล้ว ต้องมานั่ง dig ทีละ Nameserver ก็ยุ่งยากเสียเวลา หรือใช้ whatsmydns.net ก็มีไม่ครบสำหรับ ISP ในไทย

ก็เลยเขียน console app ง่าย ๆ เร็ว ๆ ไว้ใช้เอง (เขียนแบบลวกมาก แบบให้มันใช้ได้ก่อน)

แต่ก็เจอปัญหาอยู่บ้างว่ามี DNS resolver พวก ISP หลายที่เค้าไม่เปิด public ให้คนนอก ISP ใช้ ก็ลำบากนิดหน่อยแต่รวม ๆ ก็ทุ่นเวลาไปได้พอสมควรถ้าตรวจสอบกับ DNS resolver หลัก ๆ ได้ (ISP บางเจ้าข้อมูลอาจจะไม่อัพเดท เดี่ยวค่อยปรับรายการอีกที)

โปรแกรมชุดนี้พัฒนาด้วย C# บน .NET Core 3.1 ทำงานได้ทั้งบน Windows และ Linux ซึ่งตอนนี้บน GitHub ได้ build รองรับทั้ง 2 platform

สำหรับ binary ที่ได้จาก build ทดสอบบน Windows 10 (1909) และ Ubuntu 18.04 ซึ่งทำงานได้ตามวัตถุประสงค์

ตัว source code เปิด source อยู่ที่ GitHub นี้ DNS Propagation Check และ binary โหลดได้จากในส่วน Release ของ GitHub

ตรวจสอบการส่งข้อมูลของแอปที่เราใช้ ว่า Facebook ได้รับข้อมูลหรือไม่ ผ่าน Off-Facebook Activity

วันนี้ เฟซบุ๊กเปิดให้ดูข้อมูลที่ได้จากนอกเฟซบุ๊ก หรือเรียกว่า Your off-Facebook activity ใครหาเมนูไม่เจอ สามารถเข้าผ่าน URL ด้านล่างได้

https://www.facebook.com/off_facebook_activity/

ในนั้นจะมีรายการแอปที่นำส่งข้อมูลแชร์กับ Facebook มากมาย โดยเราสามารถยกเลิก หรือ block การส่งข้อมูลเข้า Facebook ได้ผ่าน Turn off future activity ได้จากหน้านี้

หากเราอยากตรวจสอบ Your off-Facebook activity แบบรายละเอียดว่า แต่ละแอปที่เราใช้ส่งข้อมูลอะไรกับ Facebook บ้าง สามารถทำได้ผ่านเมนู Download your information เราจะได้ข้อมูลทั้งหมดที่เราให้กับ Facebook เป็นไฟล์ zip

เราก็เปิด zip ไฟล์ แล้วไปที่ ads_and_business แล้วโยนไฟล์ทั้ง folder ออกมา

รายการไฟล์ทั้ง 4 แบบจะมีความหมายคือ

  • your_off-facebook_activity.html
    Your off-Facebook activity – กิจกรรมที่ถูกจัดเก็บมาจากภายนอก Facebook
  • advertisers_you’ve_interacted_with.html
    Advertisers that you’ve interacted with – โฆษณาที่คุณคลิกบน Facebook
  • advertisers_who_uploaded_a_contact_list_with_your_information.html
    Advertisers who’ve uploaded a contact list with your information – ผู้ลงโฆษณาที่ใช้ข้อมูลติดต่อด้วยการอัพโหลดข้อมูลเข้ามา
  • ads_interests.html
    Ads interests – คีย์เวิร์ดต่าง ๆ ที่ระบบคาดว่าคุณจะสนใจโฆษณา

ไฟล์ที่เราสนใจคือ your_off-facebook_activity.html เป็นหลัก (ส่วนไฟล์อีก 3 ไฟล์ จะลองดูเล่นๆ ก็ได้ แต่ไม่อธิบายในบทความนี้)

เราสามารถเช็คได้จากรายการนี้อีกรอบจากในแต่ละชื่อแอป ซึ่งจะมี link เข้าไปดูข้อมูลอย่างละเอียดอีกครั้ง

การตรวจสอบข้อมูลก็จะประมาณนี้สำหรับการดูว่ามีแอปอะไรบ้างที่ส่งข้อมูลให้ Facebook และเราจะปิดการส่งข้อมูลของแอปต่างๆ ให้ Facebook ได้อย่างไร