ล่าสุดแอดมินได้มาเริ่มศึกษา Tensorflow เลยมีโอกาสได้ดูวีดิโอของคุณ Siraj Raval เกี่ยวกับการใช้ Tensorflow เพื่อทำนายว่ารูปที่เป็นตัวเลขต่าง ๆ มีค่าเท่ากับตัวเลขตัวไหน (Digit Recognition) โดยใช้ Tensor Flow + Logistic Regression
ทีนี้ในคอมเม้นท์ก็มีการพูดคุยกันว่าเราสามารถแกะ Captcha บนเว็บไซต์ต่าง ๆ ด้วยระบบนี้ได้มั้ย แล้วมีคนโพส เอกสารจากงาน Blackhat Asia 2016 แอดเลยกดเข้าไปอ่าน เขียนได้น่าสนใจมาก เผลอแปปเดียวเอกสาร 12 หน้าอ่านจนจบ
ตอนแรกไม่ได้ดูว่าเจ้าของโปรเจคนี้เป็นใคร พอดูชื่อไฟล์ก็รู้สึกว่าชื่อ Sivakorn มันดูเอเชียมาก พอเอาชื่อ-นามสกุลไปเสิร์จก็พบว่าคุณ Suphannee Sivakorn ซึ่งเป็น 1 ในเจ้าของโปรเจคเป็นคนไทยที่ได้ทุนจากรัฐบาลไปศึกษา PhD ที่อเมริกา
พอรู้แบบนั้นยิ่งประทับใจเข้าไปอีก เลยอยากเอามาเล่าให้ฟังกันแบบคร่าว ๆ ครับ ใครอยากอ่านฉบับเต็มไปอ่านในเอกสารของเค้าได้เลย
Google reCAPTCHA คืออะไร
ใครที่กรอกฟอร์มต่าง ๆ บนอินเตอร์เน็ต เช่น ฟอร์มสมัครบริการบนเว็บไซต์ น่าจะเคยเจอกับช่องที่ให้เรากรอกตัวเลขตามรูป เพื่อยืนยันว่าเราเป็นมนุษย์จริง อันนี้คือ “CAPTCHA”
ซึ่ง Google reCAPTCHA ก็เป็นบริการแบบเดียวกัน โดยระบบจะให้เราติ๊กถูก ถ้าระบบเชื่อว่าเราเป็นมนุษย์ก็จะผ่านไปเลย แต่ถ้าระบบไม่แน่ใจ ก็จะทดสอบเราดังภาพ
วิธีทดสอบคือ เค้าจะโชว์รูป 9 รูป โดยให้เราเลือกรูปที่ตรงกับ Keyword ที่เค้าบอกมา
เช่น ในรูปตัวอย่าง reCAPTCHA ให้เราเลือกรูปที่เป็น “ซุป” เท่านั้น
ซึ่งไม่เฉพาะ Google ที่ทำแบบนี้ หลายคนอาจจะเคยเจอว่า Facebook ก็มี CAPTCHA แบบนี้มาทดสอบเราเช่นกัน (แอดเคยเจอตอนล็อกอิน Facebook เครื่องใหม่ โดยเฉพาะในต่างพื้นที่)
เราจะแกะ CAPTCHA ได้อย่างไร
CAPTCHA มีมานานแล้ว และถือเป็นศัตรูกับคนที่ต้องการ Automate ออนไลน์ทุก ๆ คน เช่น ต้องการสมัครบริการอะไรบางอย่างเป็นจำนวนมาก ๆ แต่บริการที่จะสมัครมี CAPTCHA อยู่ เลยต้องหาวิธีแกะ CAPTCHA ให้ออก
บริการที่เข้ามาช่วยในส่วนนี้เรียกว่า Decaptcha โดยวิธีการทำงาน คือ เราส่งรูปที่ต้องการแกะไปให้เค้า เค้าก็จะรีบแกะแล้วส่งกลับมา ซึ่งการ “แกะ” ที่ง่ายที่สุดก็คือ ให้คนมานั่งดูแล้วพิมพ์ตาม นั่นเอง
เพราะถ้าเราลองคิดดูแล้ว CAPTCHA คือ การเทสว่าผู้ใช้เป็นมนุษย์มั้ย โดยการเอาคำถามที่ Machine ตอบได้ยาก แต่ “มนุษย์ตอบได้ง่าย” มาถาม เพราะฉะนั้นการแกะ CAPTCHA ด้วยมนุษย์ก็เป็นอะไรที่ง่ายสุด ๆ
ในตลาดที่ดัง ๆ เช่น ในอินเดีย จะมีบริษัทที่ทำด้านนี้โดยเฉพาะเลย เค้าเอาคนมานั่งกรอก CAPTCHA โดยสนนราคาแค่ประมาณ ~50 บาท ต่อ 1000 CAPTCHA เท่านั้นเองครับ
การแกะ CAPTCHA ด้วย Machine Learning
ปกติเราค้นหารูปบน Google ด้วยคีย์เวิร์ดต่าง ๆ กันอยู่แล้ว และหลาย ๆ คนน่าจะทราบอยู่แล้วว่า เราสามารถค้นหาคีย์เวิร์ดจากรูป ได้ด้วย ซึ่งในเอกสารเรียกเจ้าสิ่งนี้ว่า GRIS หรือ Google Reverse Image Search
ซึ่งใน Google reCAPTCHA จะมีการแสดงรูปต่าง ๆ 9 รูปมาให้เราเลือก เค้าก็เลยใช้วิธีเอารูปเหล่านั้นไปโยนใส่ Google เพื่อลองหาคีย์เวิร์ดดูก่อน
แน่นอนว่าคีย์เวิร์ดต่าง ๆ ไม่ได้ตรงเป๊ะ 100% การทดลองนี้เลยต้องมีการใช้ Algorithms ต่าง ๆ ที่ช่วยในการทำ Image Classification มาช่วย ซึ่งตัวที่ทำได้ดีที่สุดคือ Clarifai เป็น Deconvolutional Network ที่ปัจจุบันเปิด API ให้คนสามารถใช้ได้ทั้งฟรีและเสียเงิน
ระบบนี้จะให้คีย์เวิร์ดตามรูปที่เราอัพโหลดเข้าไป แล้วเค้าจะส่งคีย์เวิร์ดกลับมาพร้อมเลขความน่าจะเป็นว่าระบบมั่นใจขนาดไหน
ซึ่งจาก Keyword ต่าง ๆ ที่รีเทิร์นกลับมา ระบบของเค้าก็จะสามารถเดาได้ง่ายว่ารูปในไหน CAPTCHA คือรูปที่ถูกต้อง และสามารถตอบ CAPTCHA ได้ถูก
นอกจากนั้นในการทดลองนี้ยังพบว่ายิ่งรูปความละเอียดสูง ระบบก็จะยิ่งทายได้ถูกต้องมากขึ้นอีก แต่ reCAPTCHA จะส่งมาเป็นรูปเล็ก ๆ เค้าเลยเขียนให้ระบบลองไปหารูปใหญ่ใน Google มาก่อนจะนำไปประมวลผล
สุดท้าย ระบบที่เค้าพัฒนาขึ้นมา สามารถทาย reCAPTCHA ถูกต้องถึง 60% เทียบเท่ากับบริการแกะ CAPTCHA ที่เก่าแก่ที่สุด ชื่อ Decaptcher เลยทีเดียว โดยใช้เวลาแกะแค่ 20 วินาที้เท่านั้น
ซึ่งถ้าเค้าเอาระบบนี้ไปรัน แล้วเก็บเงินเท่า Decaptcher จะสามารถทำเงินได้ประมาณ $100 / วัน / เครื่อง ไม่รวมว่าสามารถทำ Parallel Processing เพื่อให้รับลูกค้าได้มากขึ้นอีก
ที่น่าสนใจยิ่งขึ้น คือ เค้าได้ลองเอาระบบเดียวกันนี้ไปแกะ Facebook CAPTCHA ดู ซึ่งของ Facebook แกะง่ายกว่าของ Google เสียอีก เพราะรูปใน CAPTCHA เป็นรูปความละเอียดสูงที่เอามาย่อในบราวเซอร์เท่านั้น
ผลก็คือ ระบบนี้สามารถแกะ Facebook CAPTCHA ได้ในอัตราความสำเร็จ 80% !
แต่สำหรับใครที่จะไปอ่านเปเปอร์แล้วทำระบบตามก็เสียใจด้วยครับ ทีมวิจัยนี้ได้ติดต่อไปบอกวิธีการทดสอบ และวิธีการทำให้ CAPTCHA ยากขึ้น กับทีม Google และ Facebook เรียบร้อยแล้ว