bash tips: ลบไฟล์ไวรัส

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

PhotoShop 7.0/• วิธีทำตัวเยลลลี่ •_files/• วิธีทำตัวเยลลลี่ •_files.exe: W32.Autoit.Obfus FOUND
PhotoShop 7.0/• วิธีทำตัวหนังสือชอล์ค •_files/truehitsstat_files/truehitsstat_files.exe: W32.Autoit.Obfus FOUND
...

จะเห็นว่ามีรูปแบบที่เราจะตัดโดยใช้คำสั่ง cut ได้คือตั้งแต่เครื่องหมาย : เป็นต้นไป
คำสั่งที่ใช้คือ

cut -d: -f1

-d: คือใช้ : เป็นตัวแบ่ง
-f1 คื่อเมื่อแบ่งแล้ว เราจะเอาสดมถ์ที่ 1 มาใช้งาน

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

แต่มีปัญหาเพิ่มคือ ชื่อไฟล์ประกอบด้วยช่องว่างจำนวนมาก ไม่สามารถใช้คำสั่ง for i in `cat file` ได้
ค้นกูเกิลดู พบว่าเขาใช้คำสั่ง while read VARIABLE

สรุปคำสั่งทั้งหมดมาเป็นขั้นตอนดังนี้
สมมุติว่าค้นหาไวรัสในธัมบ์ไดรฟ์ในไดเรกทอรี่ /media/disk

ไปที่ที่ทำงาน

$ cd /media/disk

สแกนไวรัส แล้วเก็บผลไว้ที่ ~/virus.txt

$ clamscan -i -r * > ~/virus.txt

-i คือให้แสดงเฉพาะไฟล์ที่ติดไวรัส
-r คือให้ขุดลึกลงไปในไดเรกทอรี่ย่อยด้วย

แก้ไขไฟล์เล็กน้อย โดยตัดรายงานส่วนท้ายออก
ยกตัวอย่างส่วนที่ตัดออกคือ

$ vi ~/virus.txt
----------- SCAN SUMMARY -----------
Known viruses: 203664
Engine version: 0.92
Scanned directories: 97
Scanned files: 1234
Infected files: 252
Data scanned: 378.68 MB
Time: 130.603 sec (2 m 10 s)

ทีนี้ก็ถึงเวลาลบจริง ๆ แล้ว ***ใช้ด้วยความระมัดระวังนะครับ***
ถ้ายังไม่แน่ใจ อาจแทนที่คำสั่ง rm ด้วยคำสั่ง ls ลองดูก่อน

$ cat ~/virus.txt | cut -d: -f1 | while read FILE; do rm "$FILE"; done

เสร็จแล้วครับ

หมายเหตุ

  • ต้องติดตั้ง clamscan ไว้ก่อน ถ้ายัง ติดตั้งด้วยคำสั่ง
    $ sudo aptitude install clamav
    $ sudo freshclam
  • ปกติการเมานต์ธัมบ์ไดรฟ์ที่เป็นระบบไฟล์ vfat เขาจะเมานต์ด้วยค่าปริยายด้วยรหัสอักขระภาษาอังกฤษ ทำให้อ่านชื่อไฟล์ภาษาไทยไม่รู้เรื่อง ซึ่งจริง ๆ แล้วต้องตั้งค่ารหัสอักขระเป็น utf-8
    เราสามารถบังคับด้วยการเมานต์ใหม่ หรือตั้งค่ารหัสอักขระถาวร ดูวิธีการได้ที่ th.gnome.org: เกร็ดการแก้รหัสอักขระ usb drive
  • ถ้ามีไฟล์ชื่อ runauto.. เราจะลบไฟล์นี้ตรง ๆ ไม่ได้ ต้องใช้คำสั่งว่า
    $ rm runaut~1 -rf
    ถึงจะลบออก

ที่มา

Topic: 

ลบไวรัสด้วย AVG Anti-Virus

เครื่องลูกข่ายวินโดวส์ติดไวรัส Win32/Heur ซึ่งใช้ clamav สแกนไม่พบ
ลองค้นกูเกิลดู พบ ubuntuclub แนะนำ AVG

ก่อนอื่นก็ไปดาวน์โหลดที่นี่ http://free.avg.com/us-en/download?prd=afl

แสดงตัวอย่างด้วยบรรทัดคำสั่งคือ
ดาวน์โหลดรุ่นฟรีมาใช้

$ wget http://download.avgfree.com/filedir/inst/avg85flx-r290-a2950.i386.deb
$ sudo dpkg -i avg85flx-r290-a2950.i386.deb

สั่งให้รัน daemon

$ sudo /etc/init.d/avgd start

สั่งอัปเดตข้อมูลไวรัส

$ sudo avgupdate

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

สมมุติว่าให้ค้นที่ /media/disk และให้รายงานไว้ที่ไฟล์ ~/virus.txt

$ avgscan -r ~/virus.txt /media/disk

เตรียมการสำหรับการลบ โดยการแก้ไขไฟล์ ~/virus.txt โดยตัดส่วนหัวและส่วนท้ายให้เรียบร้อย ให้เหลือแต่ชื่อไฟล์ที่ติดไวรัส

$ vi ~/virus.txt
/media/disk/filename1  Virus XXX
/media/disk/filename2  Virus YYY

สั่งลบ (*** ใช้ด้วยความระมัดระวังนะครับ ***)

$ cat ~/virus.txt | awk -F'  ' '{print $1}' | while read FILE; do rm "$FILE"; done

หลัง -F เคาะสองวรรค (AVG ใช้ช่องว่างสองช่องคั่นชื่อไฟล์และไวรัส ดังนั้นถ้าชื่อไฟล์มีช่องว่างสองช่อง คำสั่งนี้จะใช้งานไม่ได้)

เสร็จแล้วครับ

Topic: