IT Security 101 ภายในบ้าน สำหรับ IoT

ถือเป็นโน๊ตเล็ก ๆ ในการเริ่มต้นใช้งาน IoT ในบ้านสำหรับใครหลาย ๆ คนที่ห่วงเรื่อง IT Security หลังจากติดตั้ง IoT ในบ้านก็แล้วกัน อาจจะไม่ครอบคลุมทั้งหมด แต่คิดว่าหลัก ๆ น่าจะประมาณนี้ บางอย่างก็อาจจะเวอร์ไป ก็ดู ๆ ตาม ความเหมาะสม

  1. ปรับแต่ง router gateway ของบ้านให้แน่ใจว่าไม่มี port services ที่ไม่ต้องการเปิดรับ traffic จาก internet และถ้าเป็นไปได้ให้ปิดทั้งหมด
  2. ตั้งค่า username และ password ของ router gateway ที่ไม่ใช่ค่าเริ่มต้น และควรตั้งยากๆ หน่อย (แต่ก็อย่าลืมด้วยหล่ะ)
  3. Wi-Fi ในบ้านตั้งรหัสผ่านเข้าเป็น WPA2-AES เป็นอย่างน้อย และรหัสผ่านควรตั้งยาว แต่ยังพอจำได้
  4. เป็นไปได้หา managed switch แบ่ง VLAN ออกเป็นส่วน ๆ เช่น Home, IoT และ Guest เป็นต้น
  5. ทำ monitor traffic ของ IoT ที่ติดต่อกับ internet และ block การส่งข้อมูลออกในอุปกรณ์ที่ไม่ควรจะส่งข้อมูลออก internet ให้มันอยู่ใน VLAN นั้นเท่านั้นพอ หาก allow ให้ติดต่อ internet ก็เช็ค domain หรือ IP Address ก่อนติดต่อออกไป
  6. เป็นไปได้ให้แยก VLAN อุปกรณ์ที่คาดว่าจะมีความเสี่ยงเช่น NAS, NVR หรือ CCTV ไปไว้อีก VLAN ไม่ยุ่งเกี่ยวกับใครเลย เวลาเข้าให้ตั้งค่า policy ของ firewall ให้ allow เฉพาะ mac address หรือ IP Address ที่กำหนดเท่านั้นถึงจะเข้าไปดูได้
  7. ระบบ NAS, NVR หรือ CCTV ไม่ต่อ public internet ตรง ให้ VPN เข้าไปดูผ่าน Desktop หรือ Notebook ที่ทำตัวเป็น terminal เท่านั้น เพราะอุปกรณ์เหล่านี้สุ่มเสี่ยงถูกแฮก รวมไปถึงถูกควบคุมเป็น botnet ได้ง่ายมาก เพราะผู้ใช้งานมักไม่อัพเดทตัวซอฟต์แวร์ล่าสุด หรืออุปกรณ์สิ้นสุดการสนับสนุนจากผู้ผลิตแล้ว ทำให้มีช่องโหว่ใหม่ ๆ ตามมามีความเสี่ยงมากขึ้นไปอีก
  8. เป็นไปได้ ให้แยก Wi-Fi router สำหรับแขกที่มาบ้านอีกตัว ต่อเข้า port อีกช่องบน managed switch ที่กำหนด VLAN อย่างเฉพาะก่อนต่อเข้า router gateway หรือร่วมกับ network ภายในบ้าน และ block ไม่ให้ access ข้าม VLAN แต่เพื่อความสะดวก Guest อาจจะสามารถ Cast ขึ้น Chromecast ได้เมื่อจำเป็น
  9. ถ้าคิดว่าซีเรียสเข้าไปอีก กำหนดให้หากพบ mac address ที่ไม่ได้ลงทะเบียนก่อน จะไม่สามารถต่อ internet หรือเข้าถึง network ได้ด้วย

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

เพราะใครจะไปคิดว่าแค่หลอดไฟมันจะต่อ WiFi และเชื่อมเข้า internet ได้มากขึ้น ฉะนั้นเรื่อง IT Security ภายในบ้านก็สำคัญ และควรเริ่มใส่ใจ

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

เมื่อหลายวันก่อน ถูกนำข้อมูลบัตรเครดิตไปซื้อสินค้า-บริการแปลก ๆ บน 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