Monthly Archives: เมษายน 2008

คิวสวยด้วย C#

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

คิวสวยด้วย C#

บทความโดย : ลาภลอย วานิชอังกูร (laploy.com)

 

ในบทความตอนที่แล้วผู้เขียนเสนอวิธีสร้าง Stack ด้วยภาษา C# บทความตอนนี้ก็เป็นเรื่องของโครงสร้างข้อมูลอีกเช่นกัน แต่คราวนี้เราจะมาดูวิธีสร้าง “คิว” (Queue) โดยใช้ภาษา C# กันบ้าง สิ่งที่ท่านจะได้เรียนรู้จากบทความตอนนี้คือ

 

  • หลักการทำงานของโครงสร้างข้อมูลแบบคิว
  • วิธีนิยามคลาสคิวด้วยภาษา C#
  • วิธีทำ constructor overloading
  • วิธีใช้งาน generic queue ของ .NET Framework

 

แบบนี้ที่เรียกว่าคิว

โครงสร้างข้อมูลแบบคิว (queue data structure) มีหลักการทำงานเหมือนตอนเราไปเข้าแถวชำระเงินค่าของชำในร้านสะดวกซื้อ ผู้ที่เข้าไปในคิวคนแรกจะได้อยู่หน้าสุด ผู้ที่เข้าคิวภายหลังจะอยู่ต่อจากคนแรก (และถัดมาเรื่อย) ตามปรกติผู้ที่เข้าคิวก่อนจะได้ออกจากคิวก่อนเสมอ ตามหลักการที่เรียกว่า First in, first out หรือเรียกย่อว่า FIFO เมื่อคนแรกออกจากคิวไปแล้ว ผู้ที่อยู่ต่อจากคนแรกจะได้เลื่อนตำแหน่งมาเป็นคนแรกบ้าง

การเขียนโปรแกรมสร้างคิว เราจะใช้อาร์เรย์เป็นตัวเก็บพักข้อมูล และจะแตกต่างจากคิวของมนุษย์ ตรงแทนที่จะเป็นแถวตรง เรากลับทำเป็นวงกลม (Circular buffer) ข้อมูลแรกที่ออกจากคิวไปแล้วจะไม่ถูกลบจากอาร์เรย์ เราจะใช้วิธีเลื่อนตัวชี้หัวคิวและตัวชี้ท้ายคิว แทน การเลื่อนตัวชี้สองตัวนี้จะเป็นสิ่งกำหนดว่าหน่วยใดของอาร์เรย์ (หน่วยของอาร์เรย์คือ Array Element ต่อไปจะเรียกย่อว่า AE) มีตำแหน่งเป็นหัวคิวและท้ายคิว จุดสำคัญที่ต้องเข้าใจคือคิวไม่ใช่อาร์เรย์ คิวเป็นกลไกที่เราสร้างขึ้นโดยอาศัยอาร์เรย์เป็นที่เก็บพักข้อมูล

 

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

 

 

การเข้าคิว

การนำข้อมูลใส่ในคิวเรียกว่าการเข้าคิว หรือ enqueue การเข้าคิวต้องนำข้อมูลไปต่อท้ายแถว เราจึงต้องสร้างตัวชี้ตำแหน่งท้ายแถวชื่อ back ตัวเลขที่มันเก็บคือค่าดรรชนีของอาร์เรย์ ยกตัวอย่างเช่นเมื่อโปรแกรมเริ่มทำงาน ค่าของ back จะเท่ากับ 0 เมื่อมีการเข้าคิวเราจะนำข้อมูลไปใส่ที่ AE 0 จากนั้นเราต้องเพิ่มค่า back ขึ้นหนึ่ง เมื่อมีการเข้าคิวอีกครั้งข้อมูลจะถูกเก็บไว้ที่ AE 1 และเพิ่มค่า back อีกเช่นนี้เรื่อยไป จนกระทั้งค่า back เท่ากับ AE สุดท้ายของอาร์เรย์ ค่า back จะกลับเป็นศูนย์ใหม่ วิธีทำให้ค่า back วนเป็นวงกลมเช่นนี้ทำได้โดยใช้วิธีหารเอาเศษ (หรือ modulo ในภาษา C# ใช้สัญลักษณ์ %) สูตรจะเป็นดังนี้

 

back = (back + 1) % size

 

ยกตัวอย่างเช่น หาก size เป็นแปด เมื่อโปรแกรมเริ่มทำงานค่าของ back จะถูกทำให้เป็นศูนย์ จากนั้นจะเพิ่มขึ้นหนึ่งทุกครั้งที่มีการเข้าคิว (คือกลายเป็น 1, 2, 3, 4… ไปจนถึง 6) เมื่อ back มีค่าเท่ากับ 7 หากนำมาแทนค่าในสูตรจะได้เป็น

 

back = (7 + 1) % 8

back = 8 % 8

back = 0

 

จะเห็นว่าค่าที่ได้จะกลายเป็น 0 เหมือนตอนเริ่มโปรแกรม จากนั้นเมื่อมีการเข้าคิวอีก ค่าของ back ก็จะกลายเป็น 1, 2, 3.. ไปเรื่อยๆ วนเวียนไปเช่นนี้ไม่มีวันจบ สิ่งสำคัญคือก่อนเข้าคิวต้องตรวจสอบก่อนว่าคิวเต็มแล้วหรือไม่

 

 

การออกคิว

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

 

front = (front + 1) % size

 

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

 

 

นิยามคลาส Queue

ผู้เขียนนิยามคลาสสำหรับสร้างคิวชื่อคลาส Queue ไว้แล้ว เมื่อดูในโครงสร้างแบบ outline จะเป็นดังที่เห็นในภาพ ผู้เขียนแบ่งโค้ดออกเป็นกลุ่มๆ ตามประเภทของสมาชิก (โดยใช้การเว้นบรรทัด) จะเห็นว่าคลาส Queue มีสมาชิกหลายแบบคือ constant, ฟิลด์, constructor และเมธอด ซึ่งมีรายละเอียดดังต่อไปนี้

 

โครงสร้างแบบ outline ของคลาสคิว

 

 

Constant

ผู้เขียนนิยาม constant (ตัวคงค่า หรือตัวเก็บค่าคงที่) ชื่อ default_size ทำหน้าที่เก็บค่าโดยปริยายของขนาดคิว เพื่อป้องกันการเกิด error ในกรณีที่ผู้นำคลาสนี้ไปสร้าง object ลืมกำหนดขนาดของคิว

 

private const int default_size = 8;

 

อันที่จริง constant ไม่ใช่สมาชิกของคลาส เมื่อตัวแปลภาษาพบคำสั่ง const มันจะนำค่าของ constant ไปกำหนดให้โค้ดส่วนที่อ้างถึง constant นั้น ตัวแปลภาษาจะไม่จองเนื้อที่ในหน่วยความจำเพื่อเก็บข้อมูลของ constant (เหมือนอย่างที่ทำกับตัวแปร) constant จึงไม่มีตัวตนอยู่ในโปรแกรมที่คอมไพล์แล้ว ทำให้มันไม่เป็นสมาชิกของ object

 

 

ฟิลด์สมาชิก

ผู้เขียนกำหนดให้ฟิลด์ทุกตัวมี access modifier เป็นแบบ private โปรดสังเกตว่าเราสามารถละคำว่า private (ไม่ใส่) ก็ได้ เพราะในภาษา C# หากไม่กำหนด access modifier ตัวแปลภาษาจะถือว่าตัวแปรนั้นเป็น private ไปโดยปริยาย

 

        private int size;
        private int front;
        private int back;
        private int[] values;

 

ฟิลด์ size ทำหน้าที่เก็บขนาดของคิว ค่าของ size จะไม่เปลี่ยนแปลงตลอดการทำงาน ฟิลด์ front ทำหน้าที่เป็นตัวชี้ตำแหน่งแรกของคิว อย่าลืมว่าตำแหน่งแรกของคิวไม่ใช่ตำแหน่งแรกของอาร์เรย์ (คือ AE ที่ 0) เสมอไป แต่ตำแหน่งแรกของคิวจะเปลี่ยนไปเรื่อยๆ เมื่อมีการเข้า-ออกคิว เพราะคิวเป็นสิ่งที่มีพลวัต ฟิลด์ back ทำหน้าที่เป็นตัวชี้ท้ายแถวของคิว ค่าของมันจะเปลี่ยนแปลงไปเมื่อมีการเข้า-ออกคิวเช่นกัน สุดท้ายคือ values เป็นอาร์เรย์ทำหน้าที่เป็นตัวเก็บข้อมูลในคิว (เป็นตัวพักข้อมูลหรือ data buffer)

 

 

Default Constructor

ผู้เขียนนิยาม constructor (ต่อไปจะเรียกว่า mc) ไว้สองแบบ แบบแรกเป็นแบบไม่มีอาร์กิวเมนต์ เรียกว่า default mc มีโค้ดดังนี้

 

public Queue(): this(default_size)
{
}

 

จะเห็นว่า default mc ไม่มีโค้ดอะไร เพียงกำหนดให้มันไปเรียก mc แบบที่สองอีกทอดหนึ่ง ผลลัพธ์ของโค้ดนี้คือหาก CC สร้าง object โดยไม่ระบุขนาดของคิว โปรแกรมจะนำค่าโดยปริยาย (คือค่าจาก constant default_size) มาใช้เรียก mc ตัวที่สองที่จะอธิบายในหัวข้อต่อไป

(CC คือ Client Class หมายถึงคลาสที่นำคลาสนี้ไปสร้างออพเจ็กต์ใช้งาน)

 

 

Constructor overloading

mc ตัวที่สองเป็นแบบมีอาร์กิวเมนต์ สาเหตุที่ผู้เขียนทำ overload ก็เพื่อป้องกันไม่ให้เกิด error ในกรณีที่ CC สร้าง object โดยไม่กำหนดขนาดของคิว

 

public void  Queue(int size)
{
    this.size = size;
    values = new int[size];
    front = 0;
    back = 0;
}

 

โค้ดบรรทัดแรก this.size = size อาจทำให้บางคนงง เพราะเข้าใจว่าเรานำค่าจากตัวแปรมากำหนดให้ตัวมันเอง อันที่จริงไม่ใช่ ตัวแปร this.size คือฟิลด์สมาชิก ส่วนตัวแปร size ที่อยู่ทางขวาของเครื่องหมายเท่ากับคือตัวแปรพารามิเตอร์ ซึ่งมีภาวะเป็นตัวแปรท้องถิ่นของคลานี้

นี่คือวิธีจัด “ขอบเขตของตัวแปร” (variable scope) ในภาษา C# จำง่ายๆ คือโค้ดทุกแห่งในคลาสามารถเข้าถึงฟิลด์ได้ทั้งหมด แต่ตัวแปรที่ถูกประกาศไว้ใน block ใด (block หมายถึงระหว่างเครื่องหมายปีกกาสองอัน) จะมีขอบเขตอยู่ภายใน block นั้นเท่านั้น

ด้วยเหตุนี้โค้ดบรรทัดแรก this.size = size จึงทำหน้าที่นำค่าที่ CC ส่งมา (ตอนสร้าง object) ไปกำหนดขนาดของคิว คำสั่งบรรทัดต่อมา values = new int[size] กำหนดขนาดของอาร์เรย์ (ซึ่งจะใช้เพื่อเป็นที่เก็บข้อมูล) ให้มีขนาดเท่ากันกับคิวด้วย และคำสั่งสองบรรทัดสุดท้าย กำหนดค่าเริ่มต้นให้แก่ฟิลด์ front และ back ให้เป็นศูนย์ เพราะเมื่อเริ่มต้นคิวจะว่างเปล่า หัวคิวและท้ายคิวจึงมีตำแหน่งเดียวกัน

 

 

การตรวจสอบว่าคิวเต็มหรือไม่

ก่อนเข้าคิวเราต้องดูว่าคิวเต็มหรือยัง ดังนั้นเราจึงจำเป็นต้องนิยามเมธอดชื่อ IsFull ซึ่งมีโค้ดดังนี้

 

        public Boolean IsFull()
        {
            if ((back + 1) % size == front)
                return true;
            else
                return false;
        }

 

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

 

แสดงสภาพของอาร์เรย์และตัวชี้หัว-ท้ายคิวเมื่อคิวเต็ม

 

ในภาพนี้ front มีค่าเท่ากับ 5 นั้นคือหัวคิวอยู่ที่ AE5 ของอาร์เรย์ ข้อมูลแรกของคิวจึงอยู่ที่ AE5 ข้อมูลถัดไปของคิวจึงอยู่ใน AE6 และไล่ไปเช่นนี้ ขณะนี้คิวเต็มแล้ว back จึงอยู่ที่ AE4 เมื่อในค่าในตัวอย่างนี้มาแทนค่าตัวแปรในเงื่อนไขของคำสั่ง if จะได้เป็น

 

(back+1) % size == front

(4+1) % 8 == 5

5 % 8 == 5

5 == 5

 

ผลลัพธ์คือเงื่อนไขเป็นจริง แสดงว่าคิวเต็มแล้ว โปรแกรมจะส่ง return value เป็นบูลลีน true (จริง) ในกรณีที่คิวยังไม่เต็ม เงื่อนไขจะเป็นเท็จ โปรแกรมจะส่ง return value เป็น fault (เท็จ)

 

 

การตรวจสอบว่าคิวว่างเปล่าหรือไม่

เพื่อป้อนกันการ error เมื่อจะออกคิว เราจำเป็นต้องตรวจสอบว่าคิวว่างเปล่าหรือไม่เสียก่อน (หากคิวว่างเปล่าเราจะต้องไม่ทำการออกคิว) การตรวจสอบว่าคิวว่างเปล่าหรือไม่ทำได้ง่ายมาก เพราะหากคิวว่าง ตัวชี้ front และ back จะมีค่าเท่ากัน ดังนั้นเมธอด IsEmpty จึงมีโค้ดเพียงเท่านี้

 

        public Boolean IsEmpty()
        {
            if (back == front)
                return true;
            else
                return false;
        }

 

 

 

เข้าคิวด้วยเมธอด EnQueue

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

 

        public void EnQueue(int x)
        {
            if (!IsFull())
            {
                back = (back + 1) % size;
                values[back] = x;
            }
        }

 

จากโค้ดข้างบนให้สังเกตว่าเราจำเป็นต้องตรวจสอบก่อนว่าคิวเต็มหรือไม่ หากคิวเต็ม โค้ดที่เหลือในเมธอดจะไม่ทำงาน หากคิวยังไม่เต็ม เราจะเพิ่มค่า back แล้วทำ modulo เพื่อให้คิววนรอบอาร์เรย์เป็นวงกลมดังที่อธิบายไปแล้วตอนต้นบทความ

 

 

ออกคิวด้วยเมธอด DeQueue

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

 

        public int DeQueue()
        {
            if (!IsEmpty())
            {
                front = (front + 1) % size;
                return values[front];
            }
            return 0;
        }

 

จากโค้ดข้างบนให้สังเกตว่าเราจำเป็นต้องตรวจสอบก่อนว่าคิวว่างหรือไม่ หากคิวว่าง คำสั่ง return บรรทัดล่างสุด (ก่อนวงเล็บปีกกาสุดท้าย) จะทำงานโดยส่ง return value เป็นศูนย์ หากคิวไม่ว่าง เราจะเพิ่มค่า front แล้วทำ modulo จากนั้นจะนำค่าใน AE ที่ชี้โดย front ส่งกลับไปเป็น return value

 

 

โปรแกรมทดสอบคิว

เมื่อนิยามคลาส Queue เสร็จแล้วเราต้องทดสอบการทำงานโดยเขียนโปรแกรมขึ้นดังนี้

 

       static void Main(string[] args)
        {
            Queue myQueue = new Queue(5);
            myQueue.EnQueue(10);
            myQueue.EnQueue(20);
            myQueue.EnQueue(30);
            for (int i = 0; i < 3; i++)
                Console.WriteLine(myQueue.DeQueue());
            Console.ReadLine();
        }

 

ผลลัพธ์การทำงานของโปรแกรมนี้คือ

10

20

30

 

โค้ดโดยสมบูรณ์ของคลาสคิว

เมื่อนำโค้ดทั้งหมดมารวมกันจะได้เป็นคลาสคิวที่สมบูรณ์ดังนี้

 

using System;

namespace NormalQueue
{
    class Queue
    {
        private const int default_size = 8;

        private int size;
        private int front;
        private int back;
        private int[] values;

        public Queue(): this(default_size)
        {
        }
        public Queue(int size)
        {
            this.size = size;
            values = new int[size];
            front = 0;
            back = 0;
        }

        public Boolean IsFull()
        {
            if((back+1) % size == front)
                return true;
            else
                return false;
        }
        public Boolean IsEmpty()
        {
            if (back == front)
                return true;
            else
                return false;
        }
        public void EnQueue(int x)
        {
            if (!IsFull())
            {
                back = (back+1) % size;
                values[back] = x;
            }
        }
        public int DeQueue()
        {
            if (!IsEmpty())
            {
                front = (front+1) % size;
                return values[front];
            }
            return 0;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Queue myQueue = new Queue(5);
            myQueue.EnQueue(10);
            myQueue.EnQueue(20);
            myQueue.EnQueue(30);
            for (int i = 0; i < 3; i++)
                Console.WriteLine(myQueue.DeQueue());
            Console.ReadLine();
        }
    }
}

 

 

คิวแบบ Generic

คลาส Queue ที่ผู้เขียนนิยามไว้ในหัวข้อที่ผ่านมา ใช้เพื่อศึกษาการทำงานของคิวเท่านั้น ในการใช้งานจริง .NET Framework มีคลาสไลบรารีที่จัดการคิวไว้ให้แล้ว (อยู่ใน namespace System.Collections.Generic) และดีกว่าคลาสที่เรานิยามในตัวอย่าง เพราะเป็นคิวแบบ Generic คือสามารถรับข้อมูล type อะไรก็ได้ โค้ดตัวอย่างการใช้งานเป็นดังนี้

 

        static void Main(string[] args)
        {
            Queue<string> myQueue = new Queue<string>();
            myQueue.Enqueue("abc");
            myQueue.Enqueue("hello");
            myQueue.Enqueue("thailand");
            myQueue.Enqueue("bangkok");
            while (myQueue.Count > 0)
                Console.WriteLine(myQueue.Dequeue());
            Console.ReadLine();
        }

 

ผลลัพธ์การทำงานของโปรแกรมนี้คือ

abc

hello

thailand

bangkok

 

 

สรุปเรื่องการสร้างคิวในภาษา C#

การสร้างและใช้งานคิวในภาษา C# ทำได้ง่ายมากเพราะในคลาสไลบรารีของ .NET Framework มีคลาส Queue มาให้แล้ว ในบทความตอนนี้ผู้เขียนแสดงวิธีนิยามคลาส Queue ขึ้นเองเพื่อศึกษาการทำงานของคิวเท่านั้น

 

ผู้เขียนจัดทำโค้ดตัวอย่างประกอบบทความนี้ไว้เป็นไฟล์ชื่อ QInCSharp.zip (ภายในเป็น solution ที่สร้างจาก MS Visual Studio .NET 2005) ท่านสามารถดาวน์โหลดได้จากเว็บไซต์ของผู้เขียนที่ www.laploy.com (เลือกหัวข้อ download) หากท่านมีข้อสงสัยใดๆ โปรดโพสคำถามไว้ในเว็บบอร์ดที่เว็บไซต์ดังกล่าว

Advertisements

สกิมเมอร์ : เทคโนโลยีโฉดเพื่อทรชน

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

สกิมเมอร์ : เทคโนโลยีโฉดเพื่อทรชน

ว้ายร้ายยุคไฮเทคปล้นเงินของคุณได้โดยไม่ต้องชักมีดหรือปืน อาวุธเพียงอย่างเดียวของมันคือสกิมเมอร์

    • บทความโดย : ลาภลอย วานิชอังกูร
    • เขียนเมื่อ : 12 มิ.ย. 50
    • ลงพิมพ์ในนิตยสาร : WinMag

 

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

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

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

ไม่ว่าจะเป็นการทำบัตรสี บัตรขาว หรือนำข้อมูลไปขายในอินเตอร์เน็ต คนร้ายจะต้องดูดข้อมูลจากบัตรของเราด้วยเครื่องมือพิเศษที่เรียกว่า “สกิมเมอร์”

 

อะไรหรือคือสกิมเมอร์

สกิมเมอร์ (skimmer เครื่องดูดหรือกวาดข้อมูล) คือสิ่งประดิษฐ์ที่คนร้ายสร้างขึ้นโดยนำเครื่องอ่านแถบแม่เหล็ก วงจรถอดรหัส และวงจรหน่วยความจำมาประกอบเข้าด้วยกัน สกิมเมอร์มีหลายขนาดตั้งแต่เท่ากับกล่องใส่รองเท้าไปจนถึงขนาดเท่าซองบุหรี่ที่คนร้ายซ่อนไว้ในอุ้งมือได้ ใช้พลังงานจากแบตเตอรี่จึงสามารถพกพาได้สะดวก

เมื่อนำบัตรเครดิต (หรือบัตรเดบิตเช่นบัตร ATM) มารูด สกิมเมอร์จะอ่านข้อมูลจากแถบแม่เหล็กและนำไปเก็บไว้ในหน่วยความจำ สกิมเมอร์ที่มีหน่วยความจำน้อยจะเก็บข้อมูลบัตรเครดิตได้ 50 ใบ ส่วนสกิมเมอร์ที่มีหน่วยความจำมากอาจเก็บข้อมูลได้หลายหมื่นใบ

 

สกิมเมอร์โผล่ที่พัทยา

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

วิธีลงมือของคนร้ายรายนี้คือจะเฝ้าอยู่ใกล้ตู้ ATM และจะเลือกเหยื่อซึ่งท่าทางมีฐานะดี คาดว่าน่าจะพอพูดภาษาอังกฤษได้ จากนั้นคนร้ายจะลอบดูเหยื่อกดรหัสโดยใช้กล้องส่องทางไกล หรือใช้กล้องวิดีโอขนาดจิ๋วซึ่งซุกซ่อนอยู่ในมุมที่มองเห็นการกดได้ชัดเจน เมื่อเหยื่อกดเงินได้แล้ว คนร้ายจะเข้าไปกด ATM บ้าง แต่แสร้งทำเป็นสอดบัตรเข้าเครื่องไม่ได้ และโวยวายกับเหยื่อ

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

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

 

ศูนย์สืบสวนปราบปรามคนร้ายข้ามชาติและอาชญากรรมบัตรเครดิตประสานงานกับตำรวจท่องเที่ยวจับกุม นายสะไมย ทาชชิฟินี (SMAINE TACHEFINI) สัญชาติฝรั่งเศส อายุ 20 ปี 2.นายกูอาสเมีย อะเล็กชานเดอร์(GUASMIA ALEXNDRE) สัญชาติฝรั่งเศสอายุ 21 ปี ข้อหาร่วมกันมีเครื่องมือหรือวัตถุสำหรับให้ได้ข้อมูลในการปลอมหรือแปลง เพื่อใช้หรือให้ได้ข้อมูลในการปลอมหรือแปลง ร่วมกันมีไว้เพื่อใช้ซึ่งสิ่งใดๆ อันได้มาโดยรู้ว่าเป็นของที่ปลอมหรือแปลงขึ้น

 

ทางซ้ายคือโฉมหน้าสองคนร้ายเศษฝรั่ง ทางขวาคือสกิมเมอร์ของกลางที่ตำรวจยึดไว้ได้

 

สกิมเมอร์แอ่วเหนือ

เมื่อตำรวจอำเภอเมืองเชียงรายได้รับแจ้งความจาก น.ส. เกวลิน ว่าถูก Mr. Svein สามีชาวนอร์เวย์ทำร้ายร่างกาย ตำรวจเชียงรายจึงประสานกับตำรวจท่องเที่ยวเพื่อเชิญคู่กรณีมาเจรจาไกล่เกลี่ยยังสถานีตำรวจ คดีทะเลาะเบาะแว้งไร้สาระของสามีภรรยาเปลี่ยนรูปเป็นคดีอาชญากรรม เมื่อเจ้าหน้าตำรวจสังเกตเห็นสิ่งผิดปรกติเพราะน.ส. เกวลิน เรียกร้องเงินสดสองแสนบาทจากสามีเป็นค่าไถ่ฮาร์ดดิสก์ที่ตนยึดไว้

เมื่อค้นรถยนต์และบ้านของ Mr. Svein เจ้าหน้าที่ตำรวจก็พบสกิมเมอร์และบัตรเครดิตปลอมจำนวนมาก จึงแจ้งข้อกล่าวหาว่าร่วมกันทำเครื่องมือ หรือวัสดุสำหรับปลอมหรือแปลง หรือสำหรับให้ได้ข้อมูลในการแลอมหรือแปลงสิ่งใด ซึ่งระบุเอาไว้ในมาตรา 269/1 ป.อาญา หรือมีเครื่องมือหรือวัตถุเช่นว่านั้นเพื่อใช้หรือให้ได้ข้อมูลในการปลอมหรือแปลง และมี ร่วมกันมีไว้เพื่อใช้ในสิ่งใดๆ ซึ่งระบุเอาไว้ในมาตรา 269/1 ป.อาญา

 

Mr. Svein และพวกถูกตำรวจเชียงรายจับข้อหามีสกิมเมอร์และบัตรเครดิตปลอมไว้ในครอบครอง

 

ของขวัญแด่เดนสังคม

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

  • การลักบัตรเครดิต : หากเป็นการขโมยบัตรก็เข้าข่ายการลักทรัพย์ซึ่งเป็นการกระทำความผิดตามประมวลกฎหมายอาญามาตรา ๓๓๔ จะต้องระวางโทษจำคุกไม่เกิน ๓ ปี และปรับไม่เกินหกพันบาท แต่ในกรณีของการดูดข้อมูลบัตรเครดิตด้วยสกิมเมอร์ศาลฎีกายังไม่ได้วินิจฉัยเป็นบรรทัดฐานว่าการกระทำดังกล่าวเป็นการลักทรัพย์หรือไม่
  • การยักยอกบัตรเครดิต : มีความผิดตามประมวลกฎหมายอาญามาตรา ๓๕๒ การยักยอกบัตรเครดิตเป็นเรื่องที่สร้างปัญหากับธนาคารและเจ้าของบัตรเครดิตเป็นอย่างมาก เนื่องจากเจ้าของบัตรเครดิตไม่อาจทราบได้ว่าบัตรเครดิตถูกนำไปใช้ จะรู้ก็ต่อเมื่อได้รับใบแจ้งหนี้จากธนาคารให้ไปชำระเงินที่เกิดจากการใช้บัตรเครดิต
  • ปลอมบัตร : เทียบได้กับการกระทำความผิดในฐานปลอมเอกสารสิทธิ ตามประมวลกฎหมายอาญามาตรา ๒๖๕ วิธีนี้คนร้ายจะสร้างบัตรปลอมที่มีตัวอักษรนูนและลวดลายเหมือนบัตรจริง จากนั้นนำข้อมูลของบัตรเครดิตจากสกิมเมอร์มาบันทึกลงในแถบแม่เหล็ก ข้อมูลที่บันทึกประกอบด้วยหมายเลขบัญชีของผู้ถือบัตร หมายเลขบัตร วันหมดอายุบัตร และ ชุดตัวเลขที่ธนาคารเข้ารหัสไว้ ข้อมูลดังกล่าวเป็นข้อมูลที่ใช้ยืนยันได้ว่าบัตรนั้นเป็นบัตรเครดิตที่ธนาคารออกให้จริงๆ

 

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

  • การฉ้อโกง : มีความผิดฐานฉ้อโกงตามประมวลกฎหมายอาญา มาตรา ๓๔๑ เพราะคนร้ายที่นำบัตรเครดิตไปใช้ (ด้วยวิธีการขโมยหรือสร้างบัตรเครดิตปลอมขึ้นก็ตาม) จะต้องแสดงตนเป็นเจ้าของบัตร จึงเข้าข่ายความผิดฐานฉ้อโกง
  • การปลอมใบบันทึก: การปลอมใบบันทึกการขายและนำไปใช้เป็นความผิดฐานปลอมและใช้เอกสารสิทธิปลอมตามมาตรา ๒๖๕ อาจเกิดจากการกระทำความผิดของร้านค้าที่ทุจริต หรือพนักงานที่ทุจริตโดยเจ้าของร้านค้าไม่มีส่วนรู้เห็นด้วย คนร้ายจะนำบัตรเครดิตของลูกค้ามารูดชำระค่าสินค้าและบริการสองครั้ง หลังจากนั้นจะปลอมลายมือในบันทึกการขายอันที่สอง

 

ปฏิบัติการหีนชาติ

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

  1. เมื่อเราชำระค่าสินค้าหรือบริการในร้านค้า ภัตตาคาร ปั๊มน้ำมัน หรือสถานประกอบการอื่นๆ โดยใช้บัตรเครดิตพนักงานที่ทุจริตจะนำบัตรไปทำธุรกรรมในที่ลับตา โดยจะรูดบัตรกับเครื่องรูดบัตรของธนาคารเพื่อทำธุรกรรมตามปรกติ และรูดอีกครั้งที่สกิมเมอร์เพื่อดูดข้อมูลบนบัตรไว้
  2. พนักงานมอบสกินเนอร์ที่มีข้อมูลแล้วให้กับคนร้าย
  3. คนร้ายนำสกิมเมอร์ไปเชื่อมต่อกับคอมพิวเตอร์ส่วนบุคคลแล้วถ่ายข้อมูลบัตรเครดิตจากสกิมเมอร์ไปใส่ในคอมพิวเตอร์
  4. คนร้ายสร้างบัตรใหม่โดยใช้ “เครื่องเขียนแถบแม่เหล็ก” เครื่องมือนี้เป็นอุปกรณ์ที่ต่อเชื่อมอยู่กับเครื่องคอมพิวเตอร์
  5. คนร้ายเขียนข้อมูล (ของบัตรเครดิตที่ดูดมา) ลงไปในแถบแม่เหล็กของบัตรใหม่ ซึ่งอาจเป็นบัตรปลอมที่ทำเหมือนบัตรจริง หรืออาจเพียงเป็นบัตรสีขาวที่ไม่มีลวดลายก็ได้
  6. คนร้ายนำบัตรปลอมไปใช้กดเงินสดหรือซื้อสินค้า หรืออาจนำบัตรปลอมนี้ไปขาย หรือบางกรณีอาจรวบรวมข้อมูลบัตรปลอมไว้จำนวนมากเพื่อซื้อขายในอินเตอร์เน็ต หรือส่งข้อมูลบัตรปลอมผ่านอินเตอร์เน็ตเพื่อนำไปใช้สร้างบัตรปลอมในประเทศอื่นๆ เมื่อเป็นเช่นนั้นธนาคารจะได้รับการร้องเรียนจากลูกค้าผู้ถือบัตรว่าในใบเรียกเก็บเงินมีการนำบัตรเครดิตไปใช้ในประเทศที่ตนไม่เคยไป

 

เจ็ดประการในบัตรพลาสติก

ในการปลอมบัตรเครดิตแบบเหมือนจริงคนร้ายจะคัดลอกข้อมูลสำคัญเจ็ดอย่างดังนี้

  1. เลขบัญชีขนาดสิบหกหลักพิมพ์ตัวนูน
  2. วันเริ่มและหมดอายุของบัตร
  3. ตัวอักษรพิเศษพิมพ์ตัวนูน
  4. ชื่อผู้ถือบัตรพิมพ์ตัวนูน
  5. รหัสพิเศษสามหลัก
  6. ลายเซ็นผู้ถือบัตร
  7. แถบแม่เหล็ก

รหัสพิเศษสามหลักในบัตรเครดิตแบบต่างๆ จะอยู่ในตำแหน่งที่แตกต่างกัน

 

ATM ก็โดนกับเขาด้วย

แก๊งค์โจรที่ก่ออาชญากรรมโดยหลอกลวงประชาชนเพื่อหาทางดูดเงินจากบัตร ATM เข้ากระเป๋ามีทั้งคนไทยและชาวต่างชาติ เท่าที่ตำรวจจับได้ตอนนี้พบว่าพวกโจรมีวิธีหลอกลวงสองแบบคือ

  1. ใช้สกิมเมอร์พกพา : คนร้ายปลอมตัวเป็นนักท่องเที่ยวที่มีปัญหาในการใช้งานตู้ ATM เมื่อพลเมืองดีอาสาให้ความช่วยเหลือคนร้ายทำอุบายขอดูบัตรเพื่อลอบดูดข้อมูลจากบัตรด้วยสกิมเมอร์แบบพกพาขนาดจิ๋วที่ซ่อนไว้ตามส่วนต่างๆ ของร่างกาย ร่วมกับการแอบดูการกดรหัสของเจ้าของบัตรโดยเข้าแถวต่อด้านหลัง หรือใช้กล้องส่องทางไกล หรือซ่อนกล้องวิดีโอขนาดจิ๋ว
  2. ติดตั้งสกิมเมอร์กับตู้ ATM : วิธีนี้คนร้าจะนำสกิมเมอร์ใส่ฝาครอบติดไว้กับตู้ ATM ร่วมกับการแอบดูการกด รหัสของเจ้าของบัตรโดยเข้าแถวต่อด้านหลัง ใช้กล้องส่องทางไกล หรือใช้กล้องวิดีโอขนาดจิ๋ว

 

วิธีสร้างสกิมเมอร์

การสร้างสกิมเมอร์แบบพกพาไม่ต้องอาศัยความรู้ขนาดนักวิทยาศาสตร์ผู้สร้างจรวด แค่นักอิเล็กทรอนิกส์สมัครเล่นทั่วไปก็สามารถทำได้โดยใช้วัสดุที่หาได้ทั่วไปตามท้องตลาด วิธีที่พวกมิจฉาชีพสร้างสกิมเมอร์เป็นดังนี้

เครื่องอ่านแถบแม่เหล็กก่อนและหลังการถอดปลอกโลหะด้านนอกออก

 

เครื่องอ่านแถบแม่เหล็กเมื่อถอดปลอกออกแล้วมองจากด้านบน จะเห็นหัวอ่านแถบแม่เหล็กเหมือนหัวอ่านเทปบันทึกเสียง(ด้านล่าง) มีวงจรขยายและแปลงสัญญาณอนาล็อกเป็นดิจิตอล (ด้านบน)

ภายในเครื่องอ่านแถบแม่เหล็กจะมีวงจรอิเล็กทรอนิกส์และหัวอ่านแถบแม่เหล็ก >>

คนร้ายมักไม่ถอดแกนพลาสติกภายในออก เพราะมันทำหน้าที่กำกับให้หัวอ่านมีตำแหน่งตรงกับแถบแม่เหล็ก บัตรทุกใบจะมีตำแหน่งแถบแม่เหล็กตรงกันเป็นมาตรฐาน

 

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

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

 

เครื่องอ่านแถบแม่เหล็กส่วนมากจะมีส่วนเชื่อมต่อเพื่อใช้เสียบกับพอร์ทอนุกรม (RS-232) มีบ้างเหมือนกันที่ใช้เสียบช่องเดียวกับแป้นพิมพ์คอมพิวเตอร์ มันมักเลือกแบบพอร์ทอนุกรมเพราะนำไปดัดแปลงได้ง่ายกว่า

 

ขั้นต่อมาคนร้ายจะวิเคราะห์เครื่องอ่านแถบแม่เหล็ก ว่าเมื่อรูดบัตรแล้วจะส่งข้อมูลเป็นสัญญาณไฟฟ้าออกมาในลักษณะใด การวิเคราะห์ทำได้โดยใช้ “โลจิกอนาไลเซอร์” (logic analyzer เครื่องวิเคราะห์ตรรกะ เป็นเครื่องมือวัดที่มีใช้ในห้องปฏิบัติการทางอิเล็กทรอนิกส์ทั่วไป) มันจะนำหัววัดของโลจิกอนาไลเซอร์จับที่สายสัญญาณต่างๆ ของเครื่องอ่านแถบแม่เหล็ก เมื่อรูดบัตรเครื่องอ่านแถบแม่เหล็กจะทำงานและส่งสัญญาณ หน้าจอของโลจิกอนาไลเซอร์จะแสดงระดับสูงต่ำของสัญญาณไฟฟ้าออกมาเป็นภาพแผนภูมิตามช่วงเวลา (timing diagram)

 

<< โลจิกอนาไลเซอร์ถูกนำมาใช้เพื่อวิเคราะห์ข้อมูลที่ส่งออกมาจากเครื่องอ่านแถบแม่เหล็ก

 

 

ภาพแผนภูมิตามช่วงเวลา (timing diagram) ที่แสดงบนหน้าจอของโลจิกอนาไลเซอร์

 

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

<< วงจรแปลงสัญญาณจากเครื่องอ่านบัตรแม่เหล็กเพื่อจัดเก็บไว้ในหน่วยความจำคอมพิวเตอร์

 

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

การนำเครื่องเล่น MP3 มาดัดแปลงเป็นอุปกรณ์เก็บข้อมูลทำให้เก็บข้อมูลบัตรเครดิตได้มากถึง 50,000 ใบ >>

    

 

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

 

แม้จะเป็นสกิมเมอร์ที่มีจอ LCD ในตัวก็ยังมีขนาดเล็กพอที่จะซ่อนไว้ในอุ้งมือได้ หากถอดจอ LCD ออกคงไว้แต่หัวอ่านและวงจรเก็บข้อมูล และเปลี่ยนไปใช้แบตเตอรี่ขนาดจิ๋ว คนร้ายอาจลดขนาดสกิมเมอร์ลงเหลือเท่าซองบุหรี่หรือกล่องใส่นามบัตร >>

    

 

วิธีติดตั้งสกิมเมอร์กับตู้ ATM

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

   

ขั้นแรกคนร้ายจะศึกษาลักษณะหน้าตาของช่องเสียบบัตรของตู้ ATM ที่ต้องการติดตั้ง จากนั้นจะสร้างฝาครอบจากโลหะ หรืออีพ็อกซี ตกแต่งพ่นสีให้มีลักษณะกลมกลืนกับส่วนอื่นๆ ของตู้ ภายในฝาครอบนี้จะมีเครื่องอ่านบัตร วงจรอิเล็กทรอนิกส์ และแบตเตอรี่บรรจุอยู่

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

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

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

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

 

ยี่สิบสี่คาถาคุ้มกาย

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

1. ดูให้แน่ใจว่าบัตรเครดิตอยู่ในสายตาตลอดเวลา อย่าให้พนักงานนำไปรูดในที่ลับตา เพราะพนักงานอาจร่วมมือกับคนร้ายแก๊งค์ดูดบัตร

2. อย่าให้คนแปลกหน้าจับถือบัตร เพราะอาจถูกลอบดูดบัตร

3. อย่าตอบอีเมลที่ต้องการข้อมูลบัตร เพราะอาจเป็นอีเมลที่มาจากคนร้าย

4. อย่ากรอกข้อมูลบัตรเครดิตในเว็บไซต์ที่ไม่ปลอดภัย เพราะอาจเป็นเว็บไซต์ปลอมที่ดำเนินงานโดยคนร้าย

5. ให้เซ็นชื่อไว้ในบัตร เพราะบัตรที่มีลายมือชื่อจะปลอมยากกว่า

6. ถ้าทำบัตรแบบใส่รูปได้ให้เลือกแบบใส่รูป เพราะหากบัตรถูกขโมยคนร้ายจะนำไปใช้ได้ยากกว่า

7. ตรวจสอบตู้ ATM ก่อนสอดบัตร หากพบสิ่งผิดปรกติให้แจ้งเจ้าหน้าที่ธนาคาร

8. ทำลายใบสมัครบัตรเครดิตที่กรอกแล้ว เพราะคนร้ายอาจนำข้อมูลไปสมัครบัตรเครดิตได้

9. อย่าเขียนรหัสไว้บนบัตร เพราะหากทำบัตรหายหรือถูกขโมยคนร้ายจะสามารถใช้บัตรได้ทันที

10. อย่าวางใบรับ (credit card receipt) ไว้ในที่ล่อแหลม เพราะคนร้ายอาจลอบดูหมายเลขบัตรได้

11. หาอะไรบังเมื่อป้อนรหัสที่ตู้ ATM เพราะอาจมีกล้องซ่อนไว้

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

13. พกพาเฉพาะบัตรเครดิตที่จำเป็นต้องใช้เท่านั้น จะช่วยจำกัดวงความเสียหายเมื่อทำกระเป๋าสตางค์หาย

14. เปิดซองและตรวจสอบใบแจ้งหนี้บัตรเครดิตทันทีที่ได้รับ เพราะจะได้รู้แต่เนิ่นๆ ว่ามีรายการผิดปรกติหรือไม่

15. แจ้งธนาคารทันทีหากพบรายการใช้บัตรที่ผิดปรกติ เพราะอาจเกิดจากการใช้บัตรปลอม

16. ทำลายใบรับที่เขียนผิดทุกครั้ง เพราะคนร้ายอาจนำไปใช้ทำรายการปลอมได้

17. ทำลายเอกสารที่มีหมายเลขบัตรเครดิตที่ไม่ใช้เสมอ เพราะคนร้ายอาจนำไปใช้ประโยชน์ได้

18. อย่าเซ็นชื่อลงในใบรับที่ยังไม่ได้กรอกรายการ เพราะคนร้ายอาจนำไปใช้ทำรายการปลอมได้

19. ทำลายสำเนาใบรับ (ถ้ามี) เพราะคนร้ายอาจนำไปใช้ทำรายการปลอมได้

20. อย่าเขียนหมายเลขบัตรเครดิตไว้ในที่ๆ ผู้อื่นพบเห็นได้ เพราะคนร้ายอาจนำไปใช้ประโยชน์ได้

21. หากไม่จำเป็นอย่าเก็บบัตรเครดิตไว้ในกระเป๋าสตางค์ เพราะช่วยให้ปลอดภัยหากถูกขโมยหรือทำกระเป๋าสตางค์หาย

22. อย่าให้ผู้ใดยืมบัตรเครดิต เพราะอาจตกถึงมือคนร้ายได้

23. เมื่อย้ายที่อยู่ต้องแจ้งย้ายการส่งใบแจ้งหนี้ด้วย เพื่อป้องกันคนร้ายใช้ข้อมูลใบแจ้งหนี้ที่ส่งไปยังที่อยู่เดิมที่ไม่มีผู้อยู่อาศัย

24. อย่าทิ้งเอกสารลงถังขยะ ให้ทำลายโดยการใช้เครื่องซอยก่อน เพราะคนร้ายรวบรวมเอกสารจากถังขยะเพื่อสร้างบัตรปลอมได้

 

สูงสุดคืนสู่สามัญ

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

เพื่อแก้ปัญหานี้บริษัทบัตรเครดิตได้ประดิษฐ์บัตรรุ่นใหม่ที่มีชิปฝังในตัว ชิปเช่นนี้มีวงจรรับส่งข้อมูลแบบไร้สายซึ่งสามารถอ่านข้อมูลได้เมื่อนำไปใกล้เครื่องอ่าน (proximity) แม้การลอบอ่านข้อมูลจากบัตรที่มีชิปอาจทำได้ง่ายกว่า (คนร้ายอาจดูดข้อมูลจากบัตรได้ทั้งที่เรายังไม่ได้นำบัตรออกจากกระเป๋าสตางค์) แต่การถอดรหัสข้อมูลเพื่อนำไปสร้างสำเนาอาจทำได้ยาก เพราะชิปเหล่านี้ถูกเข้ารหัสไว้อย่างอย่างซับซ้อนและใช้ระบบรักษาความปลอดภัยแบบกุญแจส่วนตัวและกุญแจสาธารณะ

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

 

เกี่ยวกับผู้เขียน
ลาภลอย วานิชอังกูร
ทำงานด้านคอมพิวเตอร์มานานกว่ายี่สิบปี สามารถเขียนโปรแกรมได้คล่องหลายภาษา เคยทำงานด้านคอมพิวเตอร์ที่ประเทศสหรัฐอเมริกา ประเทศเยอรมัน และประเทศสวิส เคยเป็นครูสอนวิชาคอมพิวเตอร์ เคยเป็นบรรณาธิการนิตยสารคอมพิวเตอร์ มีผลงานบทความ และตำราคอมพิวเตอร์จำนวนมาก ปัจจุบันทำหน้าที่เป็นผู้ให้คำปรึกษาด้านฮาร์ดแวร์และซอฟท์แวร์แก่บริษัทขนาดใหญ่หลายแห่ง ท่านสามารถติดต่อกับผู้เขียนได้ที่ laploy.com

แจกโค้ด C# วันสงกรานต์ 2008

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

แจกโค้ด C# วันสงกรานต์ 2551

วันนี้ฤกษ์งามยามดี วันสงกรานต์ ปี พ.ศ. 2551 อะไรจะดีสำหรับผมไปกว่าการเขียนรับใช้ท่านผู้อ่าน โดยแจกโค้ดแบบ Tricks & Tips ที่น่าสนใจและมีประโยชน์

 

เชื่อมสองเทเบิ้ลภายในหนึ่งดาต้าเซต

เราอาจมองดาต้าเซตเป็นเหมือนฐานข้อมูลน้อยๆ ก็ได้ ดังนั้นมันจึงควรสนับสนุนสิ่งสำคัญอย่างหนึ่งของฐานข้อมูล นั่นคือการเชื่อมความสัมพันธ์หรือ relationship ซึ่งก็คือการนำตารางหนึ่งมาผูกกับอีกตารางหนึ่งนั่นเอง โค้ดสำหรับเชื่อมสองเทเบิ้ลภายในหนึ่งดาต้าเซตในภาษา C# เป็นอย่างนี้

System.Data.DataColumn oParentColumn;
System.Data.DataColumn oChildColumn;
oParentColumn = oDS.Tables["Customers"].Columns["CustomerID"];
oChildColumn = oDS.Tables["Orders"].Columns["CustomerID"];

System.Data.DataRelation oRelation = 
[ic:ccc]new System.Data.DataRelation("CustomerOrders", 
[ic:ccc]oParentColumn, oChildColumn);
oDS.Relations.Add(oRelation);

 

สร้างวิวภายในดาต้าเทเบิ้ล

ใน ADO.NET มีดาต้าวิว (DataView) ทำหน้าที่กรองและเรียงข้อมูล วิธีสร้างวิวภายในดาต้าเทเบิ้ลในภาษา C# ทำอย่างนี้

System.Data.DataTable oTable = oDS.Tables["Customers"]; 
System.Data.DataView oView = new System.Data.DataView(oTable);

oView.RowFilter = "City='Berlin'";

 

โหลดไฟล์ XML เข้าสู่ดาต้าเซต

สิ่งที่ทำให้ดาต้าเซตทำงานได้คือ XML การโหลดไฟล์ XML เข้าสู่ดาต้าเซตจึงเป็นเรื่องสำคัญ โค้ดต่อไปนี้โหลดไฟล์ชื่อ customers1.xml เข้าสู่ดาต้าเซต

System.Data.DataSet oDS = new System.Data.DataSet();
oDS.ReadXml("http://localhost/sql2000/template/customers1.xml");

 

การสร้างเท็กซ์ไฟล์

เมื่อเขียนโปรแกรมบ่อยครั้งที่เราต้องการสร้างแฟ้มที่เก็บตัวอักษรล้วนๆ หรือ text file เพื่อบันทึกข้อมูลบางอย่างที่มีขนาดเล็กและทำงานได้รวดเร็ว โค้ดต่อไปนี้สร้างไฟล์ชื่อ MyTextFile.txt ไว้ที่รูทไดเรคทอรีของฮาร์ดดิสก์ (โฟลเดอร์ c:\) หัวใจของการทำงานคือการเรียกใช้ไทป์ StreamWriter ของ .Net

static void WriteToFile()
{
    StreamWriter SW;
    SW = File.CreateText("c:\\MyTextFile.txt");
    SW.WriteLine("God is greatest of them all");
    SW.WriteLine("This is second line");
    SW.Close();
    Console.WriteLine("File Created SucacessFully");
}
 

การอ่านเท็กซ์ไฟล์

เมื่อเขียนโปรแกรมบ่อยครั้งที่เราต้องการอ่านแฟ้มที่เก็บตัวอักษรล้วนๆ หรือ text file เพื่ออ่านข้อมูลบางอย่างที่มีขนาดเล็กและทำงานได้รวดเร็ว โค้ดต่อไปนี้อ่านไฟล์ชื่อ MyTextFile.txt ซึ่งอยู่ที่รูทไดเรคทอรีของฮาร์ดดิสก์ (โฟลเดอร์ c:\) หัวใจของการทำงานคือการเรียกใช้ไทป์ StreamReader ของ .Net

public class FileClass
{
    public static void Main()
    {
        ReadFromFile("c:\\MyTextFile.txt");
    }
    static void ReadFromFile(string filename)
    {
        StreamReader SR;
        string S;
        SR = File.OpenText(filename);
        S = SR.ReadLine();
        while (S != null)
        {
            Console.WriteLine(S);
            S = SR.ReadLine();
        }
        SR.Close();
    }
}

 
การแทรกข้อมูลเข้าสู่เท็กซ์ไฟล์

เราสามารถเขียนข้อมูลเพิ่มเข้าสู่เท็กซ์ไฟล์ (append) ได้โดยไม่ต้องทับข้อมูลเก่า คือของเก่าก็ยังอยู่ ของใหม่ก็ถูกเพิ่มต่อท้ายเข้าไป โค้ดเป็นดังนี้

public class FileClass
{
    public static void Main()
    {
        AppendToFile();
    }
    static void AppendToFile()
    {
        StreamWriter SW;
        SW = File.AppendText("C:\\MyTextFile.txt");
        SW.WriteLine("This Line Is Appended");
        SW.Close();
        Console.WriteLine("Text Appended Successfully");
    }
}

 

เซฟรูปภาพสามฟอร์แมต

โค้ดต่อไปนี้แสดงวิธีเซฟรูปภาพ โดยแสดงกรอบข้อความให้ผู้ใช้ป้อนพิมพ์ชื่อไฟล์และสามารถเลือก ฟอร์แมต ของไฟล์ได้สามแบบคือ bmp, gif และ jpg โปรดอ่านคำอธิบายที่แทรกไว้ในโค้ดครับ

private void button2_Click(object sender, System.EventArgs e)
{
   // แสดง SaveFileDialog เพื่อให้ผู้ใช้เซฟรูปภาพ
   // โดยกำหนดการทำงานไว้ที่ปุ่ม Button2
    SaveFileDialog saveFileDialog1 = new SaveFileDialog();
    saveFileDialog1.Filter = "JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
    saveFileDialog1.Title = "Save an Image File";
    saveFileDialog1.ShowDialog();

    // ตรวจสอบว่าชื่อไฟล์เป็นว่างเปล่าหรือไม่
    if (saveFileDialog1.FileName != "")
    {
        // เซฟภาพโดยใช้ FileStream ที่สร้างจากเมธอด OpenFile
        System.IO.FileStream fs = (System.IO.FileStream)saveFileDialog1.OpenFile();
      // เซฟไฟล์ให้ถูกฟอร์เมต โดยดูจากชนิดของไฟล์ที่ถูกเลือกใน dialog box
      // ค่าของ FilterIndex เริ่มจากหนึ่ง ไม่ใช่ศูนย์
        switch (saveFileDialog1.FilterIndex)
        {
            case 1:
                this.button2.Image.Save(fs,
                   System.Drawing.Imaging.ImageFormat.Jpeg);
                break;

            case 2:
                this.button2.Image.Save(fs,
                   System.Drawing.Imaging.ImageFormat.Bmp);
                break;

            case 3:
                this.button2.Image.Save(fs,
                   System.Drawing.Imaging.ImageFormat.Gif);
                break;
        }

        fs.Close();
    }
}

 

จับข้อมูลใส่ DataGridView

โค้ดต่อไปนี้อ่านแถวจากตารางในฐานข้อมูลโดยอาศัย SqlDataAdapter ดึงข้อมูลมาไว้ใน DataSet แล้วนำมาผูกไว้กับ DataGridView โค้ดนี้เป็นวินฟอร์ม ส่วนที่ใส่ข้อมูลเขียนเป็นเมธอดแยกไว้ชื่อ LoadData()

public partial class Form1 : Form
{
    private SqlDataAdapter da;
    private SqlConnection conn;
    BindingSource bsource = new BindingSource();
    DataSet ds = null;
    string sql;

    public Form1()
    {
        InitializeComponent();
    }

    private void btnLoad_Click(object sender, EventArgs e)
    {
        LoadData();
    }

    private void LoadData()
    {
        string connectionString = "Data Source=localhost;Initial Catalog=Northwind;" + "Integrated Security=SSPI;";
        conn = new SqlConnection(connectionString);
        sql = "SELECT OrderID, CustomerID, EmployeeID, OrderDate, Freight," + "ShipName, ShipCountry FROM Orders";

        da = new SqlDataAdapter(sql, conn);
        conn.Open();
        ds = new DataSet();
        SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da);
        da.Fill(ds, "Orders");
        bsource.DataSource = ds.Tables["Orders"];
        dgv.DataSource = bsource;
    }
} 

 

อัพเดตฐานข้อมูลจาก DataGridView

คงดีแน่ๆ หากผู้ใช้แก้ไขข้อมูลบน DataGridView แล้วกดปุ่มๆ เดียวก็สามารถอัพเดตข้อมูลในฐานข้อมูลได้ โค้ดเป็นดังนี้

private void btnUpdate_Click(object sender, EventArgs e)
{
    DataTable dt = ds.Tables["Orders"];
    this.dgv.BindingContext[dt].EndCurrentEdit();
    this.da.Update(dt);
}

 

ยืนยันการลบ

โค้ดต่อไปนี้แสดงกรอบข้อความให้ผู้ใช้ยืนยันการลบข้อมูลจากฐานข้อมูล การผู้ใช้กดปุ่ม OK ข้อมูลแถวที่กำหนดจะถูกลบออกจากตาราง

private void dgv_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)

private void dgv_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
{
    if (!e.Row.IsNewRow)
    {
        DialogResult res = MessageBox.Show("Are you sure you want to delete this row?", "Delete confirmation",
                 MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (res == DialogResult.No)
            e.Cancel = true;
    }
}

 

กำหนดความกว้างโดยอัตโนมัติให้ DataGridView

โค้ดต่อไปนี้จะปรับความกว้างของคอลัมน์ใน DataGridView ให้มีขนาดพอดีกับความยาวของข้อมูลโดยอัตโนมัติ

private void btnResize_Click(object sender, EventArgs e)
{
    dgv.AutoResizeColumns();
    dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

}

 

เลือกและทำแถบเน้นให้ DataGridView

โค้ดต่อไปนี้จะเลือกแถวที่สามของ DataGridView และทำแถบเน้น (Highlight) ด้วย

int rowToBeSelected = 3; // เลือกแถวที่สาม
if (dgv.Rows.Count >= rowToBeSelected)
{              
       //เนื่องจากค่าดรรชนีเริ่มจากศูนย์จึงต้องชดเชยโดยการลบหนึ่ง
        dgv.Rows[rowToBeSelected - 1].Selected = true; 
}

=================== จบ ===================

นิยายนักสืบ ตอน : วิชามาร

ไปหน้าแรก | สารบัญ | Laploy.comระเบียนบทความ | บทความจากลาภลอย

นิยายนักสืบ

ตอน : วิชามาร Social Engineering

ลาภลอย วานิชอังกูร laploy@gmail.com

 

“แฮกเกอร์มืดคือโจรใจชั่วที่ใช้แป้นพิมพ์ดังมีดปืน”

 

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

 

“แฮกเกอร์มืดที่ประสบความสำเร็จนอกจากจะต้องมีความรู้ด้านเทคนิคเป็นอย่างดีแล้ว ยังต้องเชี่ยวชาญวิชา Social Engineering ด้วย”

“มีแฮกเกอร์มืดแล้วมีแฮกเกอร์สว่างไหมครับ” คุณสุกรีถามอย่างยั่วล้อ เขาเป็นชายวัยกลางคน อ้วนลงพุงศีรษะล้าน เป็นพนักงานระดับบริหารที่มีตำแหน่งสูงสุดที่เข้าร่วมประชุม คือเป็นผู้ช่วยกรรมการผู้จัดการ

“ไม่มี มีแต่แฮกเกอร์มืดกับแฮกเกอร์เฉยๆ” ผมเฉลย “แฮกเกอร์ไม่ทำสิ่งผิดกฎหมาย เพียงแต่เป็นผู้ที่หมกมุ่นกับวิชาการมากกว่าคนปรกตินิดหน่อย ส่วนแฮกเกอร์มืดคืออาชญากรพร้อมที่จะประกอบอกุศลกรรมทุกอย่างเพื่อสนองตัณหาของตน”

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

“เป็นอย่างนั้นหรือครับ?” คุณไชยมง หัวหน้าแผนกทรัพยากรบุคคลถามอย่างประหลาดใจ

“ไม่เลย” ผมตอบสวนทันที “ในทางตรงกันข้าม แฮกเกอร์มืดส่วนมากเป็นพวกถนัดเรื่องพบปะผู้คน เจรจาคล่องแคล่ว มีทักษะในการพูดจาหลอกล่อจูงใจ มีความสามารถในการปั่นหัวคน หรือฉวยโอกาสจากสภาวะการต่างๆ เพื่อให้ได้ในสิ่งที่ตนต้องการ หรือที่เรียกว่า Social Engineering พูดง่ายๆ คือพวกมันไม่ต่างจากสิบแปดมงกุฎนัก”

 

“พวกแฮกเกอร์มืดหน้าตาเป็นยังไงครับ” คุณมโนมัย หัวหน้าแผนกนักลงทุนสัมพันธ์ถาม

“แฮกเกอร์มืดที่ประสบความสำเร็จมักหน้าตาดี บุคลิกดีน่าเชื่อถือ พูดจานุ่มนวล มีทั้งผู้ชายและผู้หญิง”

“จุดประสงค์ในการหลอกล่อคืออะไรครับ” คุณศรีข่าง หัวหน้าแผนกพัฒนาธุรกิจยกมือถาม

“จุดมุ่งหมายของพวกมันมีเพียงอย่างเดียว เหมือนกันหมดทุกคน คือต้องการชื่อและรหัสผ่าน” ผมกดปุ่มรีโหมดของเครื่องฉายภาพ “ภาพนี้คือระบบเครือข่ายของบริษัทชัยชนะ จะเห็นว่าเป็นระบบที่มีความปลอดภัยสูง เพราะได้รับการออกแบบมาอย่างดี ถูกต้องตามหลักวิชาการ เช่น server ต่างๆ ถูกกันไว้ในเครือข่ายย่อยที่เรียกว่า DMZ หรือเขตกันชน (Demilitarized zone) มีการติดตั้ง firewall ทั้งแบบฮาร์ดแวร์และซอฟท์แวร์ในตำแหน่งต่างๆ เพื่อป้องกันการบุกรุก นโยบายด้านรหัสผ่านเป็นยังไงครับ” ประโยคหลังผมหันไปถามคุณมารศรี หัวหน้าแผนกสารสนเทศ

 

ระบบเครือข่ายของบริษัทชัยชนะเป็นระบบที่มีความปลอดภัยสูง ได้รับการออกแบบมาอย่างถูกต้อง server ต่างๆ ถูกกันไว้ในเครือข่ายย่อยที่เรียกว่า DMZ หรือเขตกันชน (Demilitarized zone) และมีการติดตั้ง firewall ในตำแหน่งต่างๆ

 

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

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

“ไม่มีทางที่แฮกเกอร์จะหารหัสผ่านได้หรอก” คุณลีลาวดี system admin พูดอย่างปั้นปึ่ง พนักงานแผนกสารสนเทศที่เข้าประชุมต่างพยักหน้าอย่างเห็นด้วย

“ตรงกันข้าม อันที่จริงแล้วง่ายดายอย่างยิ่ง” ผมกล่าวสวน

“คุณมีอะไรพิสูจน์” คุณลีลาวดีถามเสียงสูงด้วยความไม่พอใจ

“อันที่จริงผมได้รับการว่าจ้างจากคุณทวีป หัวหน้าแผนกวิจัยและพัฒนา ให้ทดลองเจาะระบบ หรือทำ penetration test ซึ่งผมได้ลงมือทำแล้ว และประสบผลสำเร็จอย่างง่ายดาย โดยใช้อุบาย social engineering อย่างพื้นๆ”

เมื่อพูดมาถึงตอนนี้หากผมล้วงงูพิษหรือระเบิดออกมาวางบนโต๊ะ ปฏิกิริยาของผู้เข้าประชุมคงไม่แตกต่างจากตอนนี้ เพราะทุกคนทำท่าทางเลิกลักส่งเสียงพึมพำ เว้นแต่คุณลีลาวดีที่ไม่ส่งเสียงอะไร นั่งนิ่งหน้าถอดสี

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

“อาจารย์ช่วยเล่าหน่อยได้ไหมว่าใช้เทคนิคอะไรบ้าง” คุณมารศรีถาม

“ได้อย่างแน่นอน อันที่จริงการประชุมครั้งนี้มีขึ้นเพื่อบอกเล่าเทคนิคต่างๆ ที่พวกแฮกเกอร์มืดชอบใช้ และมักใช้ได้ผลเสมอ พวกเราจะได้คอยระวังกัน” ผมกดปุ่มรีโหมดแล้วลุกขึ้นเดินไปยังจอภาพ

 

“นี่คือ social engineering มาตรฐานที่แฮกเกอร์มืดนิยมใช้เพื่อให้ได้มาซึ่งรหัสผ่าน” ผมชี้ไปบนจอซึ่งมีข้อความดังนี้

  • หลอกถามตามชั่ว
  • แกล้งมั่วรหัสหาย
  • แปลงกายเป็น admin
  • พลิกลิ้นเป็น ISP
  • อวดดีสอดแนม
  • หาแถมจากขยะ
  • จอมสวะตกทอง

“คำอธิบายโดยย่อของแต่ละวิธีเป็นดังนี้…

 

หลอกถามตามชั่ว

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

แกล้งมั่วรหัสหาย

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

แปลงกายเป็น admin

วิธีนี้แฮกเกอร์มืดจะโทรหาพนักงานอื่นๆ ที่ไม่ใช่ admin แจ้งว่าเครื่องของผู้ใช้คนนั้นมีปัญหาบางอย่าง ให้ sign-on และ sign-off สุดท้ายจะลงเอยด้วยการถามรหัสผ่าน วิธีนี้มีข้อจำกัดเหมือนวิธีก่อนหน้าคือจะใช้ได้ผลกับหน่วยงานขนาดใหญ่เท่านั้น

พลิกลิ้นเป็น ISP

วิธีนี้แฮกเกอร์มืดจะโทรหา admin อ้างตนว่าเป็นเจ้าหน้าที่ support ของบริษัทผู้ให้บริการอินเตอร์เน็ต ต้องการซ่อมบำรุงการเชื่อมต่อ ซึ่งจำเป็นต้องขอตรวจสอบรายละเอียดการกำหนดค่าระบบ (system configuration) รวมทั้งชื่อและรหัสผ่าน บางครั้งแฮกเกอร์มืดอาจเป็นสตรี หรือใช้สตรีที่ผ่านการฝึกมาเป็นอย่างดีเป็นผู้พูด จึงลวงได้แม้ admin ที่มีประสบการณ์

อวดดีสอดแนม

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

เมื่อเข้าไปภายในสำนักงานได้แล้ว แฮกเกอร์มืดจะหาโอกาสเข้าถึงรหัสผ่านซึ่งสามารถทำได้หลายทาง เช่นแอบดูการ sing-on หยิบฉวยสมุดบันทึก หรือกระดาษ Post-it ที่จดรหัสผ่านไว้ ลอบขโมยฮาร์ดดิสก์จากแผนกซ่อมบำรุง หรือใช้เครื่องคอมพิวเตอร์ในห้องทำงานที่ว่างอยู่เป็นต้น

วิธีนี้แม้จะเสี่ยงต่อการถูกจับ แต่ในหน่วยงานที่ใหญ่มากๆ ผู้คนสับสนวุ่นวาย พนักงานมักยุ่งอยู่กับธุระของตนเอง จนไม่สังเกตความผิดปรกติใดๆ

หาแถมจากขยะ

หากการใช้โทรศัพท์ไม่เหมาะหรือไม่ได้ผล และการลอบเข้าไปในสำนักงานเสี่ยงเกินไป แฮกเกอร์มืดจะใช้วิธีเก็บรวมรวมขยะของหน่วยงานนั้นๆ ในกรณีที่ถังขยะเข้าถึงยากหรือมีการมาตรการรักษาความปลอดภัยดี แฮกเกอร์มืดอาจติดสินบนพนักงานทำความสะอาด หรือพนักงานเก็บขยะเพื่อให้รวบรวมขยะมาให้

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

หากเก็บรวบรวมและคัดแยกขยะหลายวันแล้วยังไม่พบรหัสผ่าน แฮกเกอร์มืดก็มีเทคนิคมากมายให้พนักงานนำรหัสผ่านใส่ในถังขยะ ยกตัวอย่างเช่น DSI เคยเจอคดีหนึ่งซึ่งแฮกเกอร์มืดโทรไปบอก admin ว่ามีพนักงานจำนวนมากเขียนชื่อและรหัสผ่านใส่แผ่น Post-it ติดไว้ในที่แจ้ง admin ถามว่าใครโทรมา แฮกเกอร์มืดตอบว่าไม่ประสงค์ออกนาม เพราะไม่อยากขัดใจกับเพื่อนพนักงาน admin จึงตรวจสอบดูและพบว่ามีการกระทำเช่นนั้นจริง admin จึงออกหนังสือเวียนแจ้งว่าการทำเช่นนั้นผิดระเบียบของบริษัท เมื่อพนักงานเห็นหนังสือเวียนก็ปลดแผ่น Post-it ออกจากข้างฝา ขย้ำเป็นก้อน แล้วโยนทิ้งลงถังขยะ

จอมสวะตกทอง

เทคนิคการตกทองคล้ายเทคนิคที่พวกสิบแปดมงกุฎใช้ โดยอาศัยความโลภหรือความอยากรู้อยากเห็นของมนุษย์เป็นเครื่องมือ แฮกเกอร์มืดจะส่งอีเมลไปยังเป้าหมาย แจ้งให้ทราบว่าเป็นผู้โชคดีที่ชนะรางวัล หรือปลอมเป็นอีเมลที่ส่งจากผู้บริหารไปยังฝ่ายการเงิน แต่ด้วยเหตุผลใดสักอย่าง อีเมลนั้นกลับหลุดมายังกล่องจดหมายของเป้าหมาย อีเมล ดังกล่าวจะมีไฟล์ Microsoft Excel แนบมาด้วย โดยจะมีชื่อไฟล์ว่า “โครงสร้างเงินเดือนพนักงาน 2550” หรือ “รายชื่อผู้จะได้เลื่อนตำแหน่งในไตรมาศที่สอง” หรือชื่ออื่นๆ ที่ทำให้ผู้ได้รับอยากปิดดู หากผู้รับกดที่ลิงค์ หรือเปิดไฟล์เวิร์คชีต จะมีผลให้คอมพิวเตอร์เครื่องนั้นติดโปรแกรมม้าไม้โทรจัน โปรแกรมนี้มีหน้าที่ช่วยให้แฮกเกอร์มืดเฝ้าดูและรวบรวมข้อมูลที่วิ่งอยู่ในระบบเครือข่ายได้

ในกรณีที่การใช้อีเมลเป็นเหยื่อล่อไม่อาจทำได้ หรือทำแล้วไม่ได้ผล แฮกเกอร์มืดจะใช้วิธีนำแผ่นดิสก์เก็ต แผ่นซีดี หรือแม้กระทั่ง thumb drive (แฟลชเมโมรีที่มีหัว USB) ไปวางไว้ในที่สาธารณะที่เป้าหมายมักเดินผ่าน เช่นบนพื้นใกล้รถยนต์ของเป้าหมาย ตามทางเดินในอาคารเป็นต้น”

 

“แล้วอาจารย์ใช้วิธีไหน” คุณมิติ หัวหน้าแผนกบัญชีถาม

“ผมใช้วิธีที่สามคือปลอมเป็น admin” ผมเฉลย “ผมโทรหาพนักงานคนหนึ่งในแผนกหนึ่ง ขอปกปิดชื่อไว้ก่อน ลองมาฟังเสียงที่บันทึกไว้กัน” ผมกดปุ่มเครื่องเล่น MP3 ซึ่งมีสายต่อกับเครื่องขยายเสียงในห้องประชุม ช่วยให้เสียงที่บันทึกไว้ดังเพียงพอที่ผู้เข้าประชุมทั้งห้องจะได้ยินอย่างชัดเจน

“สวัสดีครับผมโทรจากแผนกสารสนเทศ เราได้รับแจ้งว่าเครื่องของคุณทำงานช้าผิดปรกติใช่ไหม”

“คุณเป็นใคร”

“ผมชื่อยัชโญปวีต เจ้านายผมคือคุณมารศรี หัวหน้าแผนกสารสนเทศสั่งให้โทรกลับมาเบอร์นี้ เพื่อตรวจสอบตามที่ได้รับแจ้ง”

“ดิฉันไม่ได้โทรแจ้ง อาจเป็นคุณประดิษฐ์เพราะเบอร์ภายในคล้ายกัน มีคนโอนมาผิดเป็นประจำ”

“แล้วคอมพิวเตอร์ของคุณปรกติดีไหม มีช้าไหม”

“บางที่ก็ช้าเหมือนกัน”

 

“น่ากลัวว่าแผนกคุณทั้งแผนกจะติดไวรัสหรือตัวอัปมงคลอะไรสักอย่าง ผมจะตรวจสอบให้ คุณจะสละเวลาช่วยสักสองนาทีได้ไหม”

“ได้ แต่ดิฉันเพิ่งเข้าใหม่ ไม่คุ้นกับระบบที่นี่”

“ไม่เป็นไร เพียงแต่ทำตามขั้นตอนง่ายๆ ที่ผมกำลังจะบอกก็พอ พร้อมไหม”

“ค่ะ”

“ถ้างั้นคุณช่วย sing-off หน่อยผมจะลอง sing-on ด้วย account ของคุณ เพื่อจะได้ตรวจสอบได้ว่ามีอะไรผิดปรกติไหม”

“ต้องทำยังไงคะ”

“ป้อนชื่อและรหัสในหน้าพิเศษ”

“หน้าที่ว่าอยู่ตรงไหน”

“เอางี้นะครับ ผมจะป้อนที่เครื่องของผมก็ได้ ชื่ออะไรครับ”

“รติลักษ์ค่ะ”

“แล้วรหัสผ่านละครับ”

“panda500ค่ะ”

“ขอบคุณครับคุณรติลักษ์ แต่น่ากลัวว่าคุณเพิ่งจะบอกความข้อมูลที่อ่อนไหวอย่างยิ่งให้กับคนแปลกหน้า ขอเชิญเข้าร่วมประชุมเรื่องการรักษาความปลอดภัยงระบบคอมพิวเตอร์ที่ห้องประชุมใหญ่ชั้นสี่สิบวันจันทร์ที่จะถึงนี้ตอนสิบโมงเช้าด้วยนะครับ”

 

 

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

“พอได้รหัสแล้วทำอะไรได้ค่ะ? มีแต่คอมพิวเตอร์ในสำนักงานนี่เท่านั้นที่จะ sign-on เข้าสู่ระบบได้ หรือว่าอาจารย์แอบเข้ามาใช้เครื่องในนี้? รปภ. ไม่น่าจะยอมให้เข้ามานะคะ” คุณลีลาวดีตั้งคำถาม

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

“แต่เราปรับตัวส่งสัญญาณให้มีรัศมีครอบคลุมเพียงพื้นที่ในสำนักงานเท่านั้นนี่คะ โรงแรมนั่นน่าจะห่างออกไปไม่ต่ำกว่า 200 เมตร” คุณมารศรีถามอย่างประหลาดใจ

“ถูกต้องครับ ผมจึงต้องใช้เสาอากาศพิเศษเพื่อขยายสัญญาณให้แรงเพียงพอที่จะเชื่อมต่อได้อย่างมั่นคง”

“มีของแบบนี้ขายด้วยหรือคะ”

“มีสิครับ ถ้าไม่อยากซื้อจะประดิษฐ์ขึ้นเองจากหลอดใส่มันฝรั่งทอดก็ยังได้”

 


เสาอากาศขยายสัญญาณระบบเครือข่ายไร้สายย่านความถี่ 2.4GHz

“ถ้าแค่ sign-on เข้ามาใน account ของคุณรติลักษ์ก็ไม่น่าจะทำอะไรได้มาก เพราะมีสิทธิจำกัด” คุณมารศรีตั้งข้อสังเกต

“ผิดถนัดเลยครับ” ผมแก้ไข “เพราะเมื่อเข้าในระบบได้แล้วผมใช้โปรแกรม sniff เพื่อเฝ้าดูและรวบรวมข้อมูลในระบบ จากนั้นจึงนำข้อมูลมาวิเคราะห์ ใช้เวลาไม่นานผมก็ได้รหัสของ admin หรือ super user ทำให้ผมสามารถครอบครองระบบได้โดยสมบูรณ์ ผมอาจลบข้อมูลทั้งหมด ปิดระบบ หรือทำธุรกรรมที่อาจสร้างผลกำไรให้แก่ตัวผมเองได้เป็นล้านๆ ก็ได้ตามใจชอบ”

“ไม่จริง ชัยชนะไม่ใช่สถาบันการเงิน คุณจะยักยอกเงินอะไรได้” คุณมิติ หัวหน้าแผนกบัญชีแย้ง

“ในทางตรงกันข้าม ด้วยข้อมูลหมายเลขบัตรเครดิตที่ผมรวบรวมได้จากถังขยะ บวกกับข้อมูลธุรกรรมการเงินที่รวบรวมได้จากการ sniff ผมสามารถใช้ข้อมูลเหล่านี้เพื่อยักยอกเงินในลักษณะต่างๆ ได้ไม่ต่ำกว่าห้าสิบวิธี”

“ยิ่งฟังยิ่งน่ากลัวขึ้นทุกที นี่เราจะหาทางป้องกันได้ยังไงครับอาจารย์” คุณสุกรีถามขณะที่วุ่นวายอยู่กับการใช้ผ้าเช็ดหน้าซับเหงื่อบนศีรษะที่ล้านเลี่ยน

 

“ปัญหาของบริษัทชัยชนะก็เหมือนบริษัทขนาดยักษ์อื่นๆ คือไม่ได้อยู่ที่เครื่อง แต่อยู่ที่คน ฮาร์ดแวร์และซอฟท์แวร์ด้านรักษาความปลอดภัยเครือข่ายได้รับการติดตั้งไว้รัดกุมดีอยู่แล้ว สิ่งที่ยังเป็นจุดอ่อนคือบุคลากร การออกกฎระเบียบต่างๆ เพียงอย่างเดียวไม่เพียงพอ วิธีที่ดีที่สุดเพื่อรับมือกับแฮกเกอร์มืดคือต้องจัดอบรมพนักงาน ทุกฝ่าย ทุกแผนก ทุกระดับ ให้เข้าใจเทคนิค social engineering ครับ”

หมายเหตุ: ชื่อตัวละคร IP address ชื่อสถานที่ ชื่อหน่วยงาน เป็นสิ่งที่สมมุติขึ้นในทางนิยายทั้งหมด หากมีสิ่งใดตรงกับสิ่งที่มีอยู่จริงข้อให้ทราบว่าเป็นเรื่องที่เกิดขึ้นโดยบังเอิญ ผู้เขียนไม่มีเจตนาพาดพิงหรือหมิ่นประมาทผู้ใดทั้งสิ้น

 

จบเรื่องนิยายนักสืบตอน 2