CRONTAB EXPLOIT

CRONTAB EXPLOIT
ในบางครั้งเราอาจจะเจอความผิดพลาดของ admin เองที่กำหนดสิทธิ์ให้กับไฟล์ script ใดๆให้เป็น 777 เพื่อให้ง่ายต่อการใช้งาน แต่หารู้ไม่ว่าการกระทำเช่นนั้นอาจทำให้เป็นช่องทางในการเพิ่มสิทธิ์ของตัว user ได้
โดยก่อนที่จะพูดถึงเรื่องช่องโหว่ มาทำความเข้าใจกับเรื่อง permission ของระบบไฟล์ใน Linux ก่อนดีกว่าครับ

File Permission

ในการทำงานแบบ Multi-User นั้น ระบบปฎิบัติการต้องเรื่องของสิทธิของ file แต่ละ file ด้วย อีกทั้งเจ้าของ file นั้นๆ เพื่อบ่งบอกว่า file ใดควรใช้งานโดยผู้ใช้งานคนใด เราเรียกการแบ่งแยกสิทธิการเข้าถึงว่า Permission
File permission คือ สิทธิในการใช้งานไฟล์ โดยทั่วไปแล้วไฟล์ 1 ไฟล์ของ Linux นั้นจะประกอบด้วย
1. เจ้าของไฟล์ (Owner)
2. สิทธิในการอ่านเขียนไฟล์ของเจ้าของไฟล์ (Right or Permission) บุคคลที่อยู่ในกลุ่มเดียวกับเจ้าของไฟล์ (Same group)
3. บุคคลใดๆ (Other)
ถ้าเราคุ้นเคยกับระบบ NTFS ของ MS Windows แล้ว File Permission ของ Linux มีลักษณะการใช้งานที่เหมือนกัน เราลองดูลักษณะ File Permission ของ Linux ดังนี้
 course-6-201905145458ea2vbqzbfnmt.png
Permission ของ directory
course-6-2019051454582knUcSSi9tix.png
Permission ของ File
 ค่าของการอ่านจะมีค่าในลักษณะตัวเลขเป็น
  • Read = 4
  • Write = 2
  • Execute = 1
พิจารณา File permission -rwxr-xr-x ได้ว่า
rwxr-xr-x
typeOwner (user)Group ownerOthers
Numeric755
ดังนั้นค่าในการกำหนดค่าของ file จะเป็น 755 นั่นเอง โดยในระบบ UNIX/Linux นั้น เรื่องของ Permission ของไฟล์และไดเรกทอรีจะเหมือนกัน แต่ความหมายแตกต่างกัน ดังตาราง

File permission detail

CharacterPermissionความหมาย
rReadสามารถเปิดไฟล์และอ่านเนื้อความในไฟล์ได้
wWriteสามารถเพิ่มข้อความ ลบข้อความ หรือเปลี่ยนแปลงเนื้อความในไฟล์ได้
xExecuteจะใช้ในกรณีที่ไฟล์นี้สามารถทำงานได้หรือสั่งให้ทำงานได้ ซึ่งจะมีสิทธื์ในการทำงานนี้ปรากฏอยู่

Directory permission detail

CharacterPermissionความหมาย
rReadสามารถใช้คำสั่ง ls ในการดูไฟล์ภายใน Directoryได้
wWriteสามารถเพิ่มไฟล์ ลบไฟล์ เปลี่ยนชื่อไฟล์ที่อยู่ใน Directory ได้
xExecuteสามารถใช้คาสั่ง cd ทาการเปลี่ยนไดเรกทอรีปัจจุบันเข้าไปได้ หรือใช้ในการเปิดไฟล์ภายในไดเรกทอรีรวมไปถึงไดเรกทอรีย่อยภายใน
เมื่อได้รับทราบถึงข้อมูลค่าตัวเลขที่ใช้กำหนดสิทธิ์ในการจัดการไฟล์นั้นๆเราจะพบว่า admin บางส่วนมักจะแก้ปัญหาการรันหรือเข้าถึงไฟล์นั้นๆไม่ได้ด้วยการกำหนดสิทธิ์ที่เข้าถึงง่ายเกินไปแบบผิดๆโดยการกำหนด permission ของไฟล์หรือ folder ให้เป็น permission ค่า 777 ส่งผลให้เราซึ่งเป็น user ทั่วไปสามารถแก้ไขไฟล์ที่สำคัญหรือ schedule task ได้นั่นเอง

Crontab

Crontab หรือ schedule task คือระบบการทำงานตามเวลาที่กำหนด ซึ่งจะช่วยทำให้ผู้ใช้งานสั่งงานบางอย่างซ้ำๆ หรือในเวลาใดเวลาหนึ่งได้ โดยการกระทำซ้ำนั้นอาจจะเป็นทุกๆ ชั่วโมง ทุกๆ วัน หรือ ทุกๆ เดือนก็ได้เช่นกัน เช่น การสั่งให้ Server ทำ Backup ทุกๆ เดือน เป็นต้น
โดยเรามักจะใช้คำสั่งและ option ของ crontab ในการแก้ไข crontab ได้โดยใช้คำสั่ง
crontab -e
หากต้องการ list job สามารถใช้คำสั่ง
crontab -l
หากเราเป็น admin แล้วต้องการแก้ไข crontab ของ user อื่นสามารถใช้คำสั่ง
crontab -u <user>
เมื่อมีการเรียกใช้งานคำสั่ง crontab -e จะพบว่ามีการกำหนด crontab ทั้งหมด 6 แถวด้วย vi, vim, nano (แล้วแต่ Linux OS)

รูปแบบของคำสั่ง crontab

รูปแบบของคำสั่ง crontab มีทั้งหมด 6 fields ดังนี้
  • 1 = minute มีค่า 0 – 59 เวลาเป็นนาที จะสั่งให้คำสั่งที่กำหนดทำงานทันที่เมื่อถึงนาทีที่กำหนด
  • 2 = hour มีค่า 0 – 23 เวลาเป็นชั่วโมง จะสั่งให้คำสั่งที่กำหนดทำงานทันที่เมื่อถึงชั่วโมงที่กำหนด
  • 3 = day มีค่า 1 – 31 เวลาเป็นวัน จะสั่งให้คำสั่งที่กำหนดทำงานทันที่เมื่อถึงวันที่กำหนด
  • 4 = month มีค่า 1 – 12 เวลาเป็นเดือน จะสั่งให้คำสั่งที่กำหนดทำงานทันที่เมื่อถึงเดือนที่กำหนด
  • 5 = weekday มีค่า 0 – 6 วันขะงแต่ละสัปดาห์ มีค่าดังนี้ (อาทิตย์ = 0, จันทร์ = 1, อังคาร = 2, พุธ = 3, พฤหัส = 4, ศุกร์ = 5 ,เสาร์ = 6 )
  • 6 = command คำสั่ง เราสามารถกำหนดคำสั่งได้มากมาย รวมทั้ง script ต่าง ๆ ตามที่เราต้องการ
โดยสามารถจำเป็นรูปแบบง่ายได้ดังนี้
* * * * *  command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

ยกตัวอย่างคำสั่ง Crontab รูปแบบต่างๆ

  • การสั่งให้ /path/to/command ทำงานเมื่อเวลาผ่านไป 5นาที หลังเที่ยงคืน ในทุกๆ วัน
5 0 * * * /path/to/command
  • การสั่งให้ /path/to/script.sh ทำงานเวลา 20.25น. ของวันที่ 15 ในทุกๆ เดือน
25 20 15 * * /path/to/script.sh
  • การสั่งให้ /path/to/script.sh ทำงานเวลาทุกๆ 5 นาที
*/5 * * * * /path/to/script.sh
โดยปกติแล้วเมื่อ Crontab ทำงาน จะมีการส่ง email ไปยัง mail system ของ user นั้นๆ หากต้องการให้ crontab ส่ง email ไปยังบัญชีที่เรากำหนด สามารถทำได้โดยเขียนเป็น
MAILTO="[admin@domain.com](mailto:admin@domain.com)"
*/5 * * * * /path/to/script.sh

Comments

Popular Posts