Hosting windows จะป้องกันการโดนแฮกได้ยังไงครับ

Hosting windows จะป้องกันการโดนแฮกได้ยังไงครับ

มี Tools ช่วยใหมครับ เพื่อตรวจดูว่าช่องโหว่มีอยู่ตรงใหนบ้างครับ

พอดีผมโดนแฮกอ่ะครับ มันแฮกเข้ามาแก้หน้าเว็บหน้าแรกอ่ะครับ

เป็น windows 2003 standdard นะครับ มี licen ถูกต้อง อัพเดตได้ปตามปรกติ

ตอนแรกว่าเป็นที่ ftp ดูที่ Log file ของ ftp แล้ว พบว่ามีการ สุ่ม user มาเพียบ แต่ตรวจดูละเอียดแล้ว ไม่พบการ seccess เลยครับ ( ตรวจดูง่ายเพราะมีผมคนเดียว ถ้าไม่ใช่ไอพีผมก็ไอพีพวกนี้แหละ ) เลยคิดว่าไม่น่าผ่านมาจาก ftp ครับ

ประเทศที่เข้ามาแฮก มีอยู่สองประเทศครับ ( ดูตามไอพี ) Saudi Arabia กับ Turkey มันตั้งใจมาแฮกโดยเฉพาะเลยล่ะครับ

ใช cms หรือป่าวครับ
ลองดูพวก permission ถ้าเข้ามาเปลี่ยนหน้าแรกได้ แสดงว่าเปิด write เอาไว้

เป็นซับโดเมนที่ติดตั้ง สคริบฟรีอัพโหลดรูปไว้น่ะครับ

Tool มีเยอะ ถึงเยอะมากที่สุด
อยู่ที่จะใช้ตัวไหน แค่นั้นเอง

[quote author=superdog link=topic=7896.msg74527#msg74527 date=1190083356]
เป็นซับโดเมนที่ติดตั้ง สคริบฟรีอัพโหลดรูปไว้น่ะครับ

เวบลูกค้าเคยเจอครับ ปล่อยให้มีการ upload script เข้ามา
โดยไม่ได้ตรวจสอบไฟล์ที่ upload เลย

เค้าก็ส่งตัว Script ของ File Manager ขึ้นมา เห็นหมดทุกอย่างบนเวบเค้า

ลองแนะนำหน่อยสิครับ เอาทุกตัวที่จะบอกได้น่ะครับ จะลองให้หมดเลย

มันจะเอาเข้ามาได้ทางใหนเหรอครับ

งั้นลองไปนี่ดูครับ(English)What is SQL Injection (SQLi) and How to Prevent Attacks

en.wikibooks.org/wiki/Programming:PHP:SQL_Injection

SQL Injection
คือ การที่ในเวปมีการรับข้อมูลจากผู้ใช้ แล้วนำไปใช้ในการสั่งให้ฐานข้อมูลทำงาน แล้ว ผู้ใช้พยายามที่จะหลอกโปรแกรมให้ทำงานนอกเหนือจากที่เราต้องการ หรือ หลอกให้โปรแกรมทำงานโดยผ่านการตรวจสอบเงื่อนไขบางอย่าง

Injection Flaws

หมายถึง แฮกเกอร์สามารถที่จะแทรก Malicious Code หรือ คำสั่งที่แฮกเกอร์ใช้ในการเจาะระบบส่งผ่าน Web Application ไปยังระบบภายนอกที่เราเชื่อมต่ออยู่ เช่น ระบบฐานข้อมูล SQL โดยวิธี SQL Injection หรือ เรียก External Program ผ่าน shell command ของระบบปฎิบัติการ เป็นต้น

ส่วนใหญ่แล้วแฮกเกอร์จะใช้วิธีนี้ในช่วงการทำ Authentication หรือการ Login เข้าระบบผ่านทาง Web Application เช่น Web Site บางแห่งชอบใช้ “/admin” ในการเข้าสู่หน้า Admin ของ ระบบ ซึ่งเป็นช่องโหว่ให้แฮกเกอร์สามารถเดาได้เลยว่า เราใช้ http://www.mycompany.com/admin ในการเข้าไปจัดการบริหาร Web Site ดังนั้นเราจึงควรเปลี่ยนเป็นคำอื่นที่ไม่ใช่ “/admin” ก็จะช่วยได้มาก

วิธีการทำ SQL injection

ก็คือ แฮกเกอร์จะใส่ชื่อ username อะไรก็ได้แต่ password สำหรับการทำ SQL injection จะใส่เป็น Logic Statement ยกตัวอย่างเช่น ’ or ‘1’ = ‘1 หรือ " or “1”= "1 หรือ a’ or 1=1–

Query = “SELECT * FROM product WHERE Password=‘$input’”;
แต่ผู้ใช้ทำการใส่ ข้อมูลเป็น a’ or 1=1–
ดังนั้น query ที่ได้จะเป้น
Query = “SELECT * FROM product WHERE Password=‘a’ or 1=1–'”;
จะเห็นว่าเมื่อนำไช้งานแล้ว จะสามารถเรียกดูข้อมูลได้เสมอ เนื่องจาก 1=1 เป็นจริง

สมมุติว่า มีโค้ดต่อไปนี้ใน application และ parameter “userName” ซึ่งประกอบด้วย
ชื่อผู้ใช้ ช่องโหว่แบบ SQL Injection เกิดขึ้นในโค้ดนี้:

statement := “SELECT * FROM users WHERE name = '” + userName + “';”

ถ้าป้อน “a’; DROP TABLE users; SELECT * FROM data WHERE name LIKE '%”
เข้าไปในส่วน “userName” จะทำให้เกิด SQL statement ต่อไปนี้

SELECT * FROM users WHERE name = ‘a’; DROP TABLE users; SELECT * FROM data WHERE name LIKE ‘%’;

ฐานข้อมูลจะเอ็กซิคิวท์ statement ตามลำดับ คือ select data, drop user table
และ select data ทำให้ผู้ใช้เว็ปสามารถดูหรือแก้ไขข้อมูลใด ๆ ที่อยู่ในฐานข้อมูล
ที่ผู้ใช้ที่เชื่อมโยงกับฐานข้อมูลสามารถอ่าน หรือแก้ไขได้

วิธีการป้องกัน

นักพัฒนาระบบ (Web Application Developer) ควรจะระมัดระวัง input string ที่มาจากทางฝั่ง Client (Web Browser) และไม่ควรใช้วิธีติดต่อกับระบบภายนอกโดยไม่จำเป็น

ควรมีการ “กรอง” ข้อมูลขาเข้าที่มาจาก Web Browser ผ่านมาทางผู้ใช้ Client อย่างละเอียด และ ทำการ “กรอง” ข้อมูลที่มีลักษณะที่เป็น SQL injection statement ออกไปเสียก่อนที่จะส่งให้กับระบบฐานข้อมูล SQL ต่อไป

การใช้ Stored Procedure หรือ Trigger ก็เป็นทางออกหนึ่งในการเขียนโปรแกรมสั่งงานไปยังระบบฐานข้อมูล SQL ซึ่งมีความปลอดภัยมากกว่าการใช้ "Dynamic SQL Statement " กับฐานข้อมูล SQL ตรงๆ

ช่องโหว่แบบ SQL Injection สามารถแก้ไขได้ใน programming language ส่วนใหญ่
ในภาษา Java ควรมีการใช้ PreparedStatement class

แทนที่จะใช้

Connection con = (acquire Connection)
Statement stmt = con.createStatement();
ResultSet rset = stmt.executeQuery(“SELECT * FROM users WHERE name = '” + userName + “';”);

ให้ใช้โค้ดต่อไปนี้แทน

Connection con = (acquire Connection)
PreparedStatement pstmt = con.prepareStatement(“SELECT * FROM users WHERE name = ?”);
pstmt.setString(1, userName);
ResultSet rset = stmt.executeQuery();

เอามาจาก thaiware

นอกจากนี้ก็ยังมีพวก Html Injection คือถ้าใช้ script ฟรีมักจะมีช่องโหว่เยอะ
ประกอบกับกำหนด permission หละหลวม ก็เหมือนเปิดประตูหน้าบ้านทิ้งเอาไว้
พวกนี้จะมี tool ที่อาศัยช่องโหว่ของ free script access ผ่าน browser เข้ามาเปลี่ยนหน้าเว็บได้เพียงแค่ Click
ex. c99shell

ปล. บน windows ไม่มี chmod 777 นะครับ

ขอบคุณสำหรับข้อมูลครับ

ปล. บน windows มี chmod 777 นะครับ เช่น เมื่อเร็วๆนี้ ผม ติดตั้งบอร์ด smf ไป พอติดตั้งเสร็จ ผมไม่อยาก ให้ไฟล์ seting.php นี้เขียน หรือ แก้ไข ได้ ผมก็ chmod ใน ftp ให้เป็น 755 พอเข้าไปดูใน server seting อีกครั้งในบอร์ด smf ก็จะแจ้งว่า ไฟล์ seting.php ไม่สามารถแก้ไขได้

มาคิดๆดูแล้ว ผมว่าน่าจะเิกิดจากการที่ผม เอาสคริบฟรีมาใช้ซะแล้วมั๊งครับ น่าจะเป็นข้อนี้นะครับผมว่า

Windows ตระกูล NT จะมี permission files เหมือนกันครับ แต่เขาไม่ได้เรียกอย่าง unix/linux ครับ
มีสิทธิในการเข้าถึงไฟล์นั้นๆเหมือนกัน unix/linux เหมือนว่า…ทำได้มากกว่าด้วยนะครับ