2-Tier Architecture: ภัยเงียบบนระบบสาธารณสุขไทย

Safecloud
4 min readJul 23, 2024

UPDATE: ทีม Safecloud ได้ร่วมมือกับหนึ่งในบริษัทที่มีการเขียนแอปพลิเคชั่นที่เป็นตัวอย่างบนบทความนี้(ตามเลข CVE-2024–53522)และทางบริษัท Vendor ได้ทำการออกแพตช์สำหรับช่องโหว่นี้เป็นที่เรียบร้อย ท่านสามารถติดต่อกับบริษัทเพื่อรับการแก้ไขได้ทันที สำหรับบริษัทอื่นๆที่ Safecloud พบว่ามีช่องโหว่เดียวกันทีม Safecloud จะทยอยทำการติดต่อเพื่อเสนอการแก้ไขและออกเลข CVE ในอนาคต

TLDR: เนื่องจากหลายโรงพยาบาลในประเทศไทยตอนนี้มีการใช้งานระบบ HIS ที่ไม่ปลอดภัยจากการออกแบบที่เป็นแบบเก่าและมีการวางโครงสร้างเครือข่ายที่เมื่อใช้ร่วมกับระบบ HIS เช่นระบบที่ยกตัวอย่างมาในบทความนี้แล้ว ถ้าหากแฮ็กเกอร์สามารถแฮ็กเครื่องใดเครื่องหนึ่งในโรงพยาบาลได้ แฮ็กเกอร์จะสามารถเข้าไปถึงฐานข้อมูลของโรงพยาบาลด้วยสิทธิ์ของผู้ดูแลระบบได้ทันที ทำให้แฮ็กเกอร์อ่าน แก้ไข ลบหรือเข้ารหัสข้อมูลในฐานข้อมูลได้ ยิ่งโรงพยาบาลมีขนาดใหญ่เท่าไหร่ความเสี่ยงที่ต่อข้อมูลสุขภาพก็ยิ่งมีมากขึ้น

จากผลสำรวจการโจมตีทางไซเบอร์ประเทศสหรัฐอเมริกาพบว่าในช่วงปีที่ผ่านมีการโจมตีระบบสุขภาพเพิ่มขึ้นเป็นอย่างมาก นับเป็น 70% ของเหตุการณ์ที่มีข้อมูลหลุดทั้งหมด ในประเทศไทยเองก็มีแนวโน้มที่จะมากขึ้นเช่นกัน สังเกตุได้จากความถี่ที่โรงพยาบาลถูกโจมตีมีมากขึ้นเรื่อยๆ นอกจากนี้ยังมีนโยบายจากกระทรวงสาธารณสุขให้เร่งพัฒนาระบบไอทีให้มีการเชื่อมต่อข้อมูลกันมากขั้น มีการย้ายระบบต่างๆให้เป็นระบบดิจิทัล ทำให้ช่องทางโจมตีจากบุคคลภายนอกมีมากขึ้นและด้วยเวลาที่เร่งรัดอาจทำให้มีการมองข้ามเรื่องความปลอดภัยในบางส่วนได้

ในบทความนี้จะกล่าวถึงหนึ่งในความเสี่ยงที่ Safecloud มองว่าหลายโรงพยาบาลอาจมองข้ามไป จากการศึกษาระบบเครือข่ายภายในของโรงพยาบาลประเทศไทยหลายแห่งและระบบ HIS ของบริษัทผู้พัฒนาที่มีการใช้งานในประเทศพบว่ามีการเขียนแอปพลิเคชั่นในรูปแบบของ 2-Tier Architecture เป็นจำนวนมากและอาจจะทำให้เกิดความเสี่ยงต่อข้อมูลสุขภาพได้ เช่น การเปิดเผยข้อมูลในฐานข้อมูล การรบกวนการทำงานของระบบหรือการเข้ารหัสเพื่อเรียกค่าไถ่

2-Tier Architecture

โครงสร้างแบบ 2-Tier ผู้ใช้จะทำการเชื่อมต่อกับฐานข้อมูลโดยตรง

ในโครงสร้างแบบ 2-Tier การประมวลผลข้อมูลต่างๆจะอยู่ที่ฝั่งผู้ใช้งานโดยส่วนมากจะอยู่ในรูปแบบของ Desktop Application ในเครื่องของผู้ใช้และแอปพลิเคชั่นจะทำการเชื่อมต่อไปที่ฐานข้อมูลโดยตรง ทำให้ต้องมีการเก็บค่าที่ใช้ในการเชื่อมต่อสู่ฐานข้อมูลเช่น Username และ Password ไว้ในเครื่องของผู้ใช้งานแอปพลิเคชั่นทุกเครื่อง นอกจากนี้ยังอาจจะทำให้เกิดปัญหาด้านประสิทธิภาพการทำงานของแอปพลิเคชั่นเมื่อมีการเชื่อมต่อเข้าสู่ฐานข้อมูลพร้อมๆกันหลายผู้ใช้งานอีกด้วย

ตัวอย่างส่วนต่างๆในโครงสร้างแบบ 2-Tier มีดังนี้

  • Presentation tier: ในโครงสร้างแบบ 2-Tier จะทำหน้าที่ทั้งการแสดงผล การตอบโต้กับผู้ใช้งานและการประมวลผลข้อมูลรวมอยู่ด้วยกัน ทำให้แอปพลิเคชั่นต้องเชื่อมต่อกับฐานข้อมูลโดยตรง จึงต้องทำการติดตั้งแอปพลิเคชั่นและเก็บรหัสผ่านฐานข้อมูลไว้บนเครื่องผู้ใช้ทุกเครื่อง
  • Data tier: เป็นชั้นของ data หรือฐานข้อมูล ใช้ในการเก็บข้อมูล ควบคุมการเข้าถึงข้อมูลที่ไม่ซับซ้อน แบ่งเป็น relational database เช่น PostgreSQL, MySQL, MariaDB, Oracle, DB2, Informix, Microsoft SQL Server หรือในรูปแบบ NoSQL เช่น Cassandra, CouchDB or MongoDB เป็นต้น

3-Tier Architecture

โครงสร้างแบบ 3-Tier เซิฟเวอร์จะทำหน้าที่ประมวลผลการกระทำต่างๆของผู้ใช้

โครงสร้างแบบ 3-Tier จะมีการแยกส่วนการประมวลผลออกมาเป็นอีกส่วนที่เรียกว่า Application tier ทำให้ผู้ใช้ไม่ต้องเชื่อมต่อกับฐานข้อมูลโดยตรงแต่จะทำการเชื่อมต่อกับเซิฟเวอร์ตัวกลางที่สามารถทำการประมวลผลที่ซับซ้อนกว่าใน 2-Tier ได้ เช่น การกำหนดสิทธิการเข้าถึงของข้อมูลต่างๆของผู้ใช้แต่ละคน ส่วนของผู้ใช้จะทำการเชื่อมต่อกับ Application Server เพิ่มส่งค่าและรับค่าต่างๆเพื่อนำมาแสดงผลเท่านั้น

ตัวอย่างส่วนต่างๆในโครงสร้างแบบ 3-Tier มีดังนี้

  • Presentation tier: ในโครงสร้างแบบ 3-Tier จะทำหน้าที่ในการแสดงผลและการตอบโต้กับผู้ใช้งานเท่านั้น โดยการกระทำของผู้ใช้จะถูกส่งไปที่ Application tier ผ่าน API (Application Programming Interface) หรือ RPC (Remote Procedure Call) เพื่อการประมวลผลและนำผลลัพธ์กลับมาแสดงต่อผู้ใช้ Presentation tier นี้อาจอยู่ในรูปแบบ web browser หรือแอปพลิเคชั่นที่ต้องติดตั้งบนเครื่องก็ได้
  • Application tier หรือ Logic tier: เป็นชั้นที่ทำการประมวลผล Business Logic แทน Presentation tier ในโครงสร้างแบบ 2-Tier ทำให้ผู้ใช้งานไม่ต้องทำการเชื่อมต่อกับฐานข้อมูลโดยตรงและสามารถสร้างการประมวลผลที่ซับซ้อนขึ้นได้ อย่างเช่นการกำหนดสิทธิ์ของผู้ใช้ ยกตัวอย่างการควบคุมไม่ให้แพทย์หรือพยาบาลไม่ให้เข้าถึงข้อมูลคนไข้ที่ไม่ได้อยู่ในการดูแลตนเอง เป็นต้น
  • Data tier: เป็นชั้นของ data หรือฐานข้อมูล ใช้ในการเก็บข้อมูล ควบคุมการเข้าถึงข้อมูลที่ไม่ซับซ้อน แบ่งเป็น relational database เช่น PostgreSQL, MySQL, MariaDB, Oracle, DB2, Informix, Microsoft SQL Server หรือในรูปแบบ NoSQL เช่น Cassandra, CouchDB or MongoDB เป็นต้น

การโจมตีที่เป็นไปได้

จากที่กล่าวไปในหัวข้อ 2-Tier การที่แอปพลิเคชั่นบนเครื่องผู้ใช้ต้องทำการเชื่อมต่อกับฐานข้อมูลเองโดยไม่ผ่านตัวกลาง ทำให้แอปพลิเคชั่นต้องทำการเก็บรหัสผ่านฐานข้อมูลที่ใช้ในการเชื่อมต่อไว้ในเครื่อง ทำให้ผู้โจมตีที่สามารถดึงข้อมูลนี้ออกมาจากเครื่องสามารถเข้าโจมตีฐานข้อมูลได้โดยตรง

ผู้พัฒนาบางรายอาจจะคิดว่าการเข้ารหัสเป็นการป้องกันที่เพียงพอและสามารถใช้ป้องกันการโจมตีจากแฮ็กเกอร์ได้ แต่นี่เป็นความเข้าใจที่ผิดเนื่องจากในขั้นตอนการทำงานของโปรแกรมต้องมีการถอดรหัส (Decrypt) เพื่อนำรหัสผ่านฐานข้อมูลมาใช้ในการเชื่อมต่อ ถ้าแฮ็กเกอร์ทำการศึกษากระบวนการการถอดรหัสของแอปพลิเคชั่น แฮ็กเกอร์ก็สามารถเขียนโปรแกรมถอดรหัสของตัวเองออกมาได้

ต่อไปนี้จะเป็นการสาธิตวิธีการโจมตีแอปพลิเคชั่น HIS ที่มีการใช้โครงสร้างแบบ 2-Tier โดยแอปพลิเคชั่นนี้เป็นหนึ่งในแอปพลิเคชั่นที่มีการใช้งานในตลาดและมีการเข้ารหัสข้อมูลรหัสผ่านที่มีการบันทึกไว้ในเครื่อง ซึ่งวิธีการนี้สามารถนำไปปรับใช้ในการโจมตีแอปพลิเคชั่น 2-Tier อื่นได้ด้วยและในแอปพลิเคชั่นที่ไม่ได้มีการเข้ารหัสจะสามารถข้ามขั้นตอนการเขียนโปรแกรมถอดรหัสและลดเวลาในการโจมตีได้

ตัวอย่างแอปพลิเคชั่นที่ยกมานี้มีปุ่มตั้งค่า “การเชื่อมต่อ” เมื่อเปิดโปรแกรมเพื่อให้แอดมินเข้ามาใส่ค่ารหัสผ่านฐานข้อมูลเพื่อให้แอปพลิเคชั่นสามารถเชื่อมต่อกับฐานข้อมูล

ถ้าผู้ใช้งานทั่วไปเปิดเข้ามาที่หน้านี้จะไม่สามารถอ่านค่ารหัสผ่านหรือก็อปปี้รหัสผ่านจากหน้านี้

แต่รหัสผ่านที่บันทึกไว้ต้องมีการจัดเก็บเอาไว้สักที่ในเครื่อง ถ้าเปิดอ่านไฟล์ Config ของโปรแกรมจะมีการจัดเก็บข้อมูลตามด้านล่าง

[SECURITY]
USERNAME=sa
DB_SERVER=127.0.0.1
DB_NAME=hospital
PASSWORD=70263585C348D64B832438A97AD99A408B8FA5F7B78635F121B38F6B39F5171A2A1930B94EBA02679E
DATABASE_TYPE=MySQL
DB_PORT=3306
INSTANT_CLIENT=c:\oracle\client
ENABLE_DEVELOPER_PACKAGE=1
NO_ORACLE_GATEWAY=0
USE_XE_LOGIN=N
USE_SINGLE_DB_CONNECTION=1
AUTO_ANALYZE_DB_QUERY=0
USE_AUTOMATIC_CONNECTION=0
AUTO_INIT_DM=0
APPLICATION_USE_EHP_GATEWAY=N
APPLICATION_USE_EHP_GATEWAY_URL=
APPLICATION_USE_EHP_GATEWAY_USER=EC7A1F8E20E0409B028BC4D003F9AAF9834C531862A5482B519D8D43B2D41D7730CC7E
APPLICATION_USE_EHP_GATEWAY_PASSWORD=EC7A1F8E20E0409B028BC4D003F9AAF9834C531862A5482B519D8D43B2D41D7730CC7E
APPLICATION_USE_EHP_GATEWAY_HOSPCODE=EC7A1F8E20E0409B028BC4D003F9AAF9834C531862A5482B519D8D43B2D41D77

..SNIP..

แฮ็กเกอร์สามารถนำค่า USERNAME, DB_SERVER, DB_NAME, PASSWORD, DATABASE_TYPE และ DB_PORT ไปใช้การเข้าสู่ระบบฐานข้อมูลได้โดยตรง แต่ถ้าสังเกตุที่ค่า PASSWORD จะเห็นได้ว่าค่านี้มีการเข้ารหัสอยู่ แต่แฮ็กเกอร์สามารถศึกษาวิธีการถอดรหัสของแอปพลิเคชั่นเพื่ออ่านค่านี้ได้

ถ้าสังเกตุจาก DLL ที่มีการโหลดมาจากแอปพลิเคชั่นจะพบมีว่าการโหลด DLL ชื่อ DCPdelphiXE

ซึ่งสามารถบอกได้ว่ามาจาก library ชื่อ DCPcrypt ของภาษา Delphi version XE

จากการศึกษาเพิ่มเติมจะเห็นได้ว่าโปรแกรมมีการเรียกใช้ TDCP_blockcipher64 และใช้งานร่วมกันกับการเข้ารหัสแบบ DCPidea ซึ่งต้องการค่า IV และ Key ในการเข้ารหัสและถอดรหัส

แอปพลิเคชั่นมีการใช้งาน TDCP_blockcipher64

ซึ่งทั้งสองค่านี้สามารถหาได้จากภายใน Memory ของแอปพลิเคชั่นอยู่แล้ว เนื่องจากแอปพลิเคชั่นก็ต้องใช้ค่านี้ในการถอดรหัสค่า PASSWORD เพื่อนำมาใช้เชื่อมต่อฐานข้อมูล

ค่าที่ลบออกเป็น Key ที่ตัวแอปพลิเคชั่นบันทึกไว้ใน Memory

ทาง Safecloud ได้ลองเขียน PoC Code มาเพื่อทดสอบว่าสามารถโจมตีได้ตามทฤษฎีหรือไม่โดยการเขียนโปรแกรมถอดรหัสใหม่ตาม library DCPcrypt (https://github.com/Dunhamb4a/DcPCryptV2/blob/master/Ciphers/DCPidea.pas) ในภาษา powershell

ตัวอย่าง PoC Code ในส่วนที่แสดงผลสู่ผู้ใช้ โดยมีการปิด IV, Key

การเขียนโค้ดใน powershell จะสามารถทำให้โค้ดรันได้บนเครื่อง Windows โดยที่ไม่ต้องติดตั้งอะไรเพิ่มเติม นอกจากนี้ยังสามารถช่วยในการหลบการตรวจจับไฟล์แปลกปลอมโดยการรันโค้ดในเมมโมรี่ได้อีกด้วย

หลังจากที่รันโปรแกรม PASSWORD ที่ถูกเข้ารหัสไว้จะถูกถอดออกมาเป็น Plain Text

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

เปรียบเทียบการโจมตี 2-Tier กับ 3-Tier

ในโครงสร้างแบบ 2-Tier เมื่อมีเครื่องใดเครื่องหนึ่งถูกโจมตี แฮ็กเกอร์จะสามารถเข้าสู่ฐานข้อมูลได้

จากตัวอย่างการโจมตี เมื่อมีเครื่องใดเครื่องหนึ่งในองค์กรถูกโจมตี แฮ็กเกอร์สามารถเข้าทำการยึดฐานข้อมูลได้ทันที สำหรับหน่วยงานขนาดเล็กอาจจะไม่เป็นความเสี่ยงมากนัก แต่ในโรงพยาบาลที่มีขนาดใหญ่ในระดับที่มีคอมพิวเตอร์เป็นจำนวนมาก Safecloud มองว่าจุดนี้เป็นความเสี่ยงที่มองข้ามไม่ได้ นอกจากนี้ในโรงพยาบาลจำนวนมากก็อนุญาตให้เครื่องที่มีการติดตั้งระบบ HIS สามารถเข้าใช้งานอินเทอร์เน็ตได้ตามปกติ ทำให้เพิ่มความเสี่ยงที่ข้อมูลฐานข้อมูลหลุดหรือโดนโจมตีมีมากขึ้น

เมื่อเทียบกับโครงสร้างแบบ 3-Tier แล้ว ถึงเครื่องคอมพิวเตอร์ในโรงพยาบาลจะถูกโจมตีโดยแฮ็กเกอร์จะไม่สามารถเข้าถึงฐานข้อมูลได้โดยตรงเหมือนกับโครงสร้าง 2-Tier ทำให้แฮ็กเกอร์ต้องทำการโจมตีระบบเครือข่ายภายใน (Internal Network) ต่อและถ้าเครือข่ายภายในมีการตั้งค่าที่ดี มีการติดตั้งโปรแกรม Anti-Virus, EDR, Firewall ตามมาตรฐาน HAIT Plus จะสามารถลดความเสี่ยงการเข้าถึงฐานข้อมูลลงจากแบบ 2-Tier ได้เป็นจำนวนมาก

คำแนะนำ

สำหรับองค์กรหรือโรงพยาบาลที่มีการใช้งานแอปพลิเคชั่นแบบ 2-Tier ทาง Safecloud จะขอแบ่งคำแนะนำคร่าวๆออกเป็นสองรูปแบบ ตามความเสี่ยงที่รับได้และงบประมาณของแต่ละโรงพยาบาล

Complete Overhaul

ทำการเปลี่ยนไปใช้งานแอปพลิเคชั่นแบบ 3-Tier เช่นระบบ HIS ที่มีรูปแบบเป็น Web Server และให้เซิฟเวอร์นี้เข้าถึงได้โดยผู้ที่อยู่ในเครื่องข่ายภายในเท่านั้น ทำให้ในกรณีที่ผู้ใช้งานถูกโจมตีและแฮ็กเกอร์สามารถเข้ามาในเครือข่ายได้แล้ว แฮ็กเกอร์จะไม่สามารถขโมยรหัสผ่านฐานข้อมูลในเครื่องผู้ใช้ได้และต้องทำการโจมตีช่องโหว่ในระบบ Web Server ต่อ ถึงจะสามารถเข้าถึงข้อมูลที่เก็บไว้ได้ นอกจากนี้ถ้าหากมีการติดตั้งระบบ WAF ควบคู่กับ Log Monitoring หรือระบบ SIEM จะทำให้การโจมตีสามารถทำได้ยากขึ้นและสามารถตอบโต้ได้ทันถ้าหากตรวจพบว่ามีการเริ่มการโจมตีภายในเครือข่าย

Quick Fix

ในกรณีที่ไม่สามารถเปลี่ยนระบบแอปพลิเคชั่นได้ Safecloud แนะนำให้มีการแบ่งกลุ่มการใช้งานระบบ HIS และอินเทอร์เน็ตออกจากกัน พร้อมกันป้องกันไม่ให้เครื่องที่สามารถใช้งานอินเทอร์เน็ตเข้าถึงฐานข้อมูลได้ การทำระบบเครือข่ายในรูปแบบนี้อาจทำให้เกิดปัญหากับผู้ใช้งานระบบ HIS ในปัจจุบันได้ เนื่องจากโรงพยาบาลส่วนใหญ่อนุญาตให้เจ้าหน้าที่ใช้อินเทอร์เน็ตร่วมกับการใช้ระบบ HIS มาเป็นเวลานาน ซึ่งโรงพยาบาลอาจจะอะลุ่มอล่วยให้ผู้ใช้อินเทอร์เน็ตที่ต้องการจะเข้าใช้งานระบบ HIS ทำการ Remote เข้าเครื่องที่มีการติดตั้ง HIS ได้แต่ก็จะเพิ่มความเสี่ยงในการถูกเข้าถึงฐานข้อมูลไปด้วย

Safecloud บริการให้คำปรึกษาด้านความปลอดภัยทางไซเบอร์ที่ได้รับการรับรองจากองค์กรระดับสากลและมีความเชี่ยวชาญที่รับรองตามมาตรฐาน ด้วยประสบการณ์การให้ทำปรึกษาและการดำเนินการทดสอบเจาะระบบให้กับองค์กรด้านสาธารณสุขมากมาย

Tel: 084 151 6974

Email: contact@safecloud.co.th

--

--

Safecloud
Safecloud

Written by Safecloud

Safecloud provides penetration testing service using real world approach by skilled cyber security professionals.

No responses yet