บทนำ
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.