Through the Tunnel : ป้องกันความเสี่ยงจากการใช้งาน AWS SSM Port Forwarding

บทนำ
AWS SSM Session Manager เป็นเครื่องมือที่ทำให้สามารถ Remote เข้าไปยัง EC2 Instances ได้โดยไม่ต้องเปิดการเข้าถึงจาก Internet ซึ่งถือเป็น Best Practice ที่ทาง Amazon Web Services (AWS) แนะนำ แทนการใช้ Secure Shell (SSH) เนื่องมาจากความเสี่ยงในการเปิด Port SSH ให้เข้าถึงได้จาก Internet

SSM Session Manager มีหลายฟีเจอร์ โดยหนึ่งใน​ Feature คือ Port Forwarding ที่ช่วยสร้างช่องทางการเชื่อมต่อผ่าน SSM Service ระหว่างผู้ใช้งานกับ EC2 Instances ได้อย่างปลอดภัยโดยไม่ต้องมีการเปิด Port ใด ๆ

อย่างไรก็ตามฟีเจอร์นี้ ถ้ามีการตั้งค่าผิดพลาด หรือใช้งานอย่างไม่เหมาะสม อาจทำให้เกิดความเสี่ยงทางด้านความปลอดภัย เช่น การใช้ข่องทางนี้เพื่อเชื่อมต่อไปยังเครื่องอื่น ๆ ภายใน AWS Cloud ที่ติดตั้ง SSM Agent

บทความนี้จะนำเสนอถึงความเสี่ยงที่อาจเกิดขี้นจาการใช้งานฟีเจอร์ Port Forwarding และวิธีการป้องกันเพื่อเพิ่มความปลอดภัยให้กับระบบ
ความเสี่ยงที่อาจจะเกิดขึ้น ?
เมื่อ AWS SSM Port Forwarding ถูกตั้งค่าอย่างไม่เหมาะสม อาจนำไปสู่สถานการณ์ต่อไปนี้:

การเข้าถึง EC2 Instances โดยไม่ได้รับอนุญาต : ผู้โจมตีอาจสามารถใช้ SSM Port Forwarding เพื่อเข้าถึง EC2 Instances ที่ไม่ได้รับการป้องกัน ซึ่งอาจนำไปสู่การเปลี่ยนแปลง หรือการเข้าถึงข้อมูลโดยไม่ได้รับอนุญาต
การขโมยข้อมูล : ผู้โจมตีอาจสามารถสร้าง Secure Tunnel เพื่อขโมยข้อมูลที่มีความสำคัญออกจาก EC2 Instances โดยไม่ถูกตรวจจับ เช่น การใช้ SCP เพื่อถ่ายโอนข้อมูลที่มีความสำคัญ
การโจมตีต่อไปภายในระบบ (Lateral Movement) : ผู้โจมตีอาจใช้ SSM Port Forwarding เพื่อเชื่อมต่อไปยัง Internal Server หรือระบบอื่น ๆ ในเครือข่าย เพื่อขยายผลการโจมตี และเข้าถึงข้อมูลที่มีความสำคัญเพิ่มเติม

เหตุการณ์เหล่านี้แสดงให้เห็นถึงความเสี่ยงที่อาจเกิดขึ้น หากไม่มีการตั้งค่า และใช้งาน SSM Port Forwarding อย่างเหมาะสม

AWS SSM Manager คืออะไร ?
AWS Systems Manager Session Manager เป็นบริการ Managed Service จาก AWS ที่ช่วยให้สามารถจัดการ EC2 Instances ได้อย่างปลอดภัย โดยไม่จำเป็นต้องใช้การเข้าถึงผ่าน SSH หรือ Bastion Host โดยผู้ดูแลระบบสามารถสร้างการเข้าถึงแบบ Shell หรือ Command Line ไปยัง EC2 Instances ผ่านทาง AWS Management Console, AWS CLI หรือ SDKs โดยไม่ต้องเปิด Instances ให้เข้าถึงได้จาก Internet

 
AWS SSM Port Forwarding คืออะไร ?
AWS SSM Port Forwarding เป็นฟีเจอร์ที่ทำงานคล้ายกับ SSH Tunneling แต่แทนที่จะใช้ SSH เป็นการใช้ SSM Agent ในสร้างการเขื่อมต่อ (Tunnel) ระหว่างเครื่องผู้ใช้งาน (Local Machine) และ EC2 Instance ที่อยู่บน Cloud

โดยผู้ใช้งานต้องมีสิทธิ์ต่อไปนี้ :

สิทธิ์ IAM User ที่เหมาะสม
การติดตั้ง AWS CLI กับ Session Manager Plugin บนเครื่อง Local Machine

 
ประโยชน์ของ SSM Port Forwarding :

ไม่จำเป็นต้องใช้ Public IP หรือเปิด Port : ช่วยลดความเสี่ยงจากการโจมตีผ่าน Internet
ไม่ต้องกำหนด Inbound Security Group (Firewall Policy) : เพิ่มความปลอดภัยให้กับระบบโดยรวม
ใช้ Debug Application ที่อยู่ใน Private Subnet : สามารถเชื่อมต่อเพื่อแก้ไขปัญหาได้โดยไม่ต้องเปิด Endpoint ให้เข้าถึงได้จาก Internet
ใช้จัดการ Database : เช่น การเชื่อต่อไปยัง Database ที่ไม่มี Public Endpoint

รายละเอียดเชิงเทคนิคเกี่ยวกับความผิดพลาดที่อาจเกิดขึ้น :
1. การเข้าถึง EC2 Instances โดยไม่ได้รับอนุญาต
หนึ่งในความผิดพลาดที่พบบ่อยของ Developer หรือ Administrator คือการเขียน IAM Policy ที่มี Resource: ""* ซึ่งไม่ได้จำกัดการเข้าถึงอย่างรัดกุม ทำให้ผู้ใช้งานสามารถเข้าถึง และสร้างการเชื่อมต่อ (Tunnel) ไปยัง EC2 Instances ได้ทุกเครื่องใน AWS Account ซึ่งอาจนำไปสู่ปัญหาด้านความปลอดภัย เช่น การเข้าถึงข้อมูลโดยไม่ได้รับอนุญาต หรือการโจมตีต่อไปยังภายในระบบแบบ Lateral Movement

ตัวอย่าง IAM Policy ที่ไม่ปลอดภัย

การตั้งค่าลักษณะนี้ทำให้ผู้ใช้งานสามารถเริ่ม Session Manager กับ EC2 Instances ได้โดยไม่มีการควบคุมว่าเป็น Instance ใด ซึ่งเป็นช่องโหว่ที่สำคัญในด้านการตั้งค่าความปลอดภัย

 
2. การขโมยข้อมูล (Data Exfiltration)
ผู้โจมตีอาจสามารถใช้คำสั่ง ssm start-session เพื่อสร้างการเชื่อมต่อ (Tunnel) ไปยัง Port 22 บน EC2 Instance ซึ่งเป็นพอร์ตที่ใช้สำหรับ SSH โดยเฉพาะ โดยการเชื่อมต่อนี้จะช่วยให้ผู้โจมตีสามารถเข้าถึง และ Copy ไฟล์ข้อมูลสำคัญออกจากเครื่องได้อย่างง่ายดาย

ตัวอย่างคำสั่ง :

สร้างการเชื่อมต่อ (Tunnel) ผ่าน SSM : คำสั่งนี้เป็นการสร้างการเชื่อมต่อจาก Port 22 บน EC2 Instance ไปยัง Port 1022 บนเครื่อง Local

$ aws aws ssm start-session \

--target instance-id \

--document-name AWS-StartPortForwardingSession \

--parameters '{"portNumber":["22"], "localPortNumber":["1022"]}'
 

Copy ไฟล์ผ่าน SCP : คำสั่งนี้ใช้ SCP เพื่อคัดลอกไฟล์ secret-data.

การยกระดับการป้องกันและตรวจจับการโจมตีประเภท Web Shell ด้วยระบบ Endpoint Detection and Response (EDR)

หลังจากที่ได้รู้จักกับ Web Shell ว่าคืออะไร กันแล้วนั้นใน What is Web Shell?

แล้วรู้หรือไม่ว่าเราสามารถป้องกัน Web Server ของเราจากการโจมตีของ Web Shell ให้ดีขึ้นได้ด้วยระบบ Endpoint Detection and Response (EDR)

เพราะเบื้องหลังการโจมตีเหล่านั้นคือ กระบวนการที่ผู้โจมตีได้ป้อนชุดคำสั่ง (Input System Command) ผ่าน Web Browser ซึ่งจะทำให้ Web Server Process (เช่น IIS, PHP, JAVA, Node.

Critical vulnerabilities in libwebp (WebP) library

A recently identified vulnerability within the web application library (libwebp) has the potential to lead to RCE (Remote Code Execution) when exploited and can allow hackers to run malicious code in your system. This vulnerability is specifically a heap-based buffer overflow issue found within the libwebp library, which serves the purpose of decoding and encoding WebP image files.

What is Webshell?

ช่วงหลัง ๆ เราจะได้ยินคำว่า Webshell กันค่อนข้างบ่อยครั้ง วันนี้ i-secure จะพาเพื่อนๆ มารู้จักว่า Webshell ซึ่งเป็นหนึ่งในเทคนิคการโจมตีที่พบได้บ่อยมากๆ ในปัจจุบัน

Webshell คืออะไร และทำไมมันจึงเป็นวิธีการที่เหล่า Hacker นิยมใช้ในการโจมตีเหยื่อกันบ่อยครั้ง

ก่อนอื่น ต้องทำความเข้าใจวิธีคิดที่ Hacker คิดก่อน จุดมุ่งหมายหลักของ Hacker คือต้องการเข้าถึงข้อมูลของเหยื่อ เช่น เข้าถึงข้อมูลความลับ (Confidentiality) หรือเข้าไปดัดแปลงแก้ไขข้อมูลให้เปลี่ยนแปลงไป (Integrity) หรือไม่ก็ทำการขัดขวางไม่ให้ใครๆเข้าถึงข้อมูลนั้นๆได้ (Availability)

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

แล้ว Webshell คืออะไร?

Webshell คือไฟล์ที่ Hacker สร้างขึ้นมาเพื่อใช้สำหรับควมคุมเครื่อง Web Server ของเหยื่อหลังจาก Hacker พบช่องทางในการโจมตี โดย Webshell ถูกเขียนด้วยภาษาของ Web Application ยกตัวอย่างเช่นภาษา PHP เป็นต้น โดยใช้ประโยชน์จากคำสั่งหรือ Library ที่สามารถเรียกใช้งานของระบบ System Command หรือ OS Command คำสั่งเช่น “whoami” ,”ipconfig /all”, “mkdir” เป็นต้น 

แผนผังการทำงานของ Webshell ที่รอรับ input จาก Attacker
Ref: https://www.