Thứ Năm, 6 tháng 4, 2017

COMMAND INJECTION – SERIES WEB APPLICATION SECURITY

1. NỘI DUNG

  • Giới Thiệu
  • Command Injection
  • Cách Phòng Chống
  • Các Bài Viết Liên Quan

2. GIỚI THIỆU

       Theo Wiki của OWASP: https://www.owasp.org/index.php/Command_Injection
  • Như vậy tóm lại là dựa vào sơ hơ của Web Application, Hacker- kẻ tấn công có thể thực hiện các câu lệnh, dòng code của OS để thực hiện các hành vi không tốt đối với hệ thống. Việc tiêm thêm (injection) vào ứng dụng để thực thi hành vi không tốt là một lỗi vô cùng nguy hiểm. Có thể gây lỗi cho host, lấy cắp thông tin, thậm trí chiếm quyền quản lý server.

3. COMMAND INJECTION

  • Xem xét cách thức lợi dụng lỗ hổng bảo mật
    • Ví dụ về một ứng dụng web:
    • Web Application trên là một ứng dụng ping một địa chỉ IP hoặc website nào đó. Kết quả của việc [ping google.com.vn] được hiển thị kết quả như màn hình trên.
    • Mọi sự chẳng có gì nếu gặp một ai đó sử dụng đúng mục đích.
    • Hãy xem trong trường hợp level security thấp thì hệ thống sẽ xử lý ra sao:
    • Nếu kẻ tấn công thử với vài câu lệnh nho nhỏ:
    • Như kế quả trên thì hệ chức năng Ping này quả thật là nguy hiểm. Nó có thể hiển thị được tất cả nội dung trong file /etc/passwd. File lưu thông tin về account, password của server.
    • Kẻ gây hại có thể xem hết nội dung của các file trong hệ thống. Có thể tạo ra 1 shell script thực hiện một hành vi gây hại nào đó rồi dùng các command của linux để nạp, chạy, thậm trí xóa dữ liệu của server. Nếu user chạy Web có khả năng quyền root nữa thì lỗ hổng trên trở lên vô cùng nghiêm trọng
    • Nguyên nhân của việc trên là các chức năng thực thi các câu lệnh của OS mà không hề kiểm tra tính đúng đắn của input đầu vào.

4. CÁCH PHÒNG CHỐNG

  • Không bao giờ tin tưởng giá trị đầu vào của người dùng.
  • Loại bỏ các ký tự đặc biệt bên server như các chuyển hướng, điều kiện của command hệ thống
  • Với mỗi loại command muốn chạy thì kiểm tra chặt chẽ đầu vào. Như ứng dụng trên kiểm tra việc nhập vào có đúng format của địa chỉ IP: {digit}.{digit}.{digit}.{digit}
  • Cách phòng chống của bên DVAW cung cấp với mức level imposible của ứng dụng PING:


SQL INJECTION – SERIES WEB APPLICATION SECURITY

1. NỘI DUNG

  • Giới Thiệu
  • SQL Injection
  • SQL Injection Blind
  • Cách Phòng Chống
  • Các Bài Viết Liên Quan

2. GIỚI THIỆU

  • SQL Injection chia làm 2 loại chính:
    • SQL Injection
    • SQL Injection (Blind)
  • Trong các bài viết về Series Web Application Security sẽ sử dụng DVWA để có thể thấy rõ được cách thức tấn công và lỗ hổng .
    • Trong DVWA có 4 cấp độ Security – được lưu trữ trong cookie : security
      • imposible – với cấp độ này thì kẻ tấn công không thể nào tấn công được hệ thống
      • high – khi thiết lập ở cấp độ này vẫn có thể tấn công vào hệ thống nhưng rất khó
      • medium – mức độ security trung bình
      • low – mức độ thấp nhất có thể hack một cách dễ dàng để có thể hiểu về các lỗ hổng. <các bài viết sẽ đề cập tới level này  và level: imposible>

3. SQL INJECTION

  • Kiểu tấn công nguy hiểm khi tiêm thêm dữ liệu đầu vào để liệt kê ra các dữ liệu không mong muốn đổ ra cho người dùng nhìn thấy.
  • Database:

XEM XÉT LỖ HỔNG

    • Trang web có chức năng hiển thị:
      • Client nhập vào số ID và hiển thị ra các thông tin về người dùng như ID, First Name, Surname
      • Một client bình thường thì sẽ không có vấn đề gì. Client sẽ chỉ nhập đúng những ID yêu cầu.
      • Với level security low thì code kiểm tra ID như sau:
      • Một Hacker ác ý có thể nhập một số chuỗi
        • [10000′ OR ‘1’ = ‘1]  như vậy câu Query trên nếu cộng thêm $id thì sẽ thành như sau:
        • Như vậy với câu SQL trên thì sau khi được thực hiện sẽ lấy ra hết cả first_name, last_name từ trong table users.
        • Kết quả:
          • Nếu thay đổi sang level cao hơn của DVWA: Level = high thì bên server:
          • Với level như trên thì khi nhập [10000′ OR ‘1’ = ‘1] -> câu query sẽ thành:

            • Như vậy cho dù lấy được dữ liệu ra nhưng không phải toàn bộ những dữ liệu của bảng users.
              • Lúc này thử thay đổi đầu vào khi lợi dụng một số comment out của MYSQL:
              • Dữ liệu nhập: [1000′ OR 1=1; — ‘] Query sẽ thành:
              • Vì sau dấu: [–] mọi thứ sẽ trở thành comment của đoạn query nên nó không có ý nghĩa. Và với đoạn mã trên làm cho lỗ hổng SQL Injection vẫn có thể lợi dụng được.

4. SQL INJECTION BLIND

    • Đây là một kiểu tấn công hết sức kỳ công. Cũng dựa trên lỗ hổng về SQL và để mò mẫm dữ liệu. Có một số Web Application chỉ đưa ra thông báo lỗi và kẻ tấn công dựa vào đó hỏi database những câu hỏi kiểu dạng Đúng, Sai để có thể tìm được dữ liệu của DataBase. Vì câu hỏi Đúng Sai cần rất nhiều mới biết được câu trả lời nên kiểu tấn công này rất kỳ công, khó nhưng vẫn có thể xảy ra.
    • Xem xét lỗ hổng
    • Trang web hiển thị: DVWA: SQL Injection (Blind) – security level: low
      • Trong ví dụ trên thì hệ thống Web Application cung cấp một chức năng kiểm tra userID có tồn tại hay không. Nếu có dữ liệu thì trả về message: ‘User ID exists in the database‘ ngược lại trả về: ‘User ID is MISSING from the database
      • Để kiểm tra chức năng trên có thể khai thác lỗ hổng SQL Injection Blind không thì thử nhập với chuỗi sau: [1000′ OR 1 = 1 — ] và dự đoán kết quả sẽ như sau:
      • Như vậy dù nhập dữ liệu UserID ko có trong Database thì câu trả lời vẫn là có. Như vậy chức năng trên có thể lợi dụng để kiểm tra SQL Injection Blind.
      • Câu hỏi để hỏi database trong SQL Injection Blind thường là [ {true query} AND {check query}]. Ví dụ như câu hỏi SQL ở trên, đã có UserID=1 rồi nên có hỏi database như sau:[1′ AND (SELECT user_id FROM users where user_id<10 LIMIT 1)>0 — ] hoặc [1′ AND (SELECT user_id FROM users where user_id>=10 LIMIT 1)>0 –]. Với câu hỏi database như trên. Nếu cái nào trả về true thì có thể đoán được là user_id
        • Như kết quả từ cách thử trên thì đoán được user_id của bảng users chỉ có giá trị nhỏ hơn 10. Nhưng ở đây Hacker làm sao biết được có những bảng nào với trường nào? Chả lẽ chịu thua? Một cách thức khác dựa vào đây có thể đoán được cấu trúc database, table, column. Ví dụ
        • Với câu hỏi trên với database ta có thể biết được có 1 table có tên bắt đầu bằng chữ ‘u’, để kiểm tra có table tên usser, có column tên usser_id hay không? thì hacker sẽ tốn khá nhiều time để thử.
        • Nhưng sau khi thử xong và có thể dựa vào câu hỏi đúng sai có thể tìm được account, password, các thông tin muốn trộm cắp… một cách dễ dàng – chỉ tội mất time

5. CÁCH PHÒNG CHỐNG

  • Nguyên Nhân Bị mắc lỗi SQL Injection.
    • Do lỗi developer tạo SQL Query bằng cách cộng chuỗi thông thường.
    • Do việc thông báo lỗi đúng sai khi query một query. – SQL Injection Blind
    • Do việc không xử lý input đầu vào từ bên client ở trên server side.
  • Cách phòng chống
    • Dùng SQL_PlaceHolder thay vì cộng chuỗi thông thường:
    • Không đưa ra thông báo lỗi liên quan đến database khi thực hiện query sai
    • Không bao giờ tin tưởng input của client.
  • Một trang web đang hoạt động bị gặp SQL – Innjection: Chú ý nội dung chỉ để tham khảo. Trang web đó đã fixed nên đừng cố thử

GIỚI THIỆU TỔNG QUAN SERIES WEB APPLICATION SECURITY

1. NỘI DUNG

  • Giới Thiệu Về Series Web Application Security
  • Các Lỗi Bảo Mật – Theo IPA
  • DVWA
  • Các Bài Viết Liên Quan Tới Series

2. GIỚI THIỆU VỀ SERIES WEB APPLICATION SECURITY

Web application security is a branch of Information Security that deals specifically with security of websites, web applications and web services.
At a high level, Web application security draws on the principles of application security but applies them specifically to Internet and Web systems.
  • Với sự phát triển của công nghệ Web như hiện nay thì vấn đề bảo mật là hết sức quan trọng. Tại Việt Nam tháng 11/2016 vừa qua có vụ việc Vietnamworks bị tấn công và làm lộ hàng chục nghìn thông tin tài khoản. Việc Vietnam Airlines bị hack hồi tháng 7 – 2016 làm lộ khoảng 400.000 nghìn dữ liệu khách hàng. Hay vụ thông báo đã hack được một số thương hiệu đang nổi ở VN như Lotte Cinema, Lozzi… Thì thấy rằng việc bảo mật hiện tại các developer VN vẫn còn chưa được chú trọng nhiều.
  • Với mục đích chia sẻ và phát triển kiến thức liên quan đến bảo mật. Tôi muốn viết series về Web Application Security để các developer có thể tham khảo và đóng góp giúp sự phát triển của developer VN.
  • Nội dung của Series này sẽ bám theo một project phục vụ tìm hiểu về security. Project Damn Vulnerable Web Application (DVWA)  bao gồm các chức năng cơ bản của một trang web và có chứa một số lỗi security thông dụng. Tôi muốn giới thiệu về một số lỗi bảo mật cũng như cách khắc phục thông qua các chức năng mà Project trên cung cấp.

3. CÁC LỖI BẢO MẬT – THEO IPA

IPA LÀ GÌ

 LIST CÁC LỖI BẢO MẬT MÀ IPA CÔNG BỐ

  • SQL Injection
  • OS Command Injection
  • Unchecked Path Parameter / Directory Traversal
  • Improper Session Management
  • Cross-Site Scripting
  • CSRF (Cross-Site Request Forgery)
  • HTTP Header Injection
  • Mail Header Injection
  • Lack of Authentication and Authorization

4. DVWA

GIỚI THIỆU VỀ DVWA

  • Trang chủ: http://www.dvwa.co.uk/
  • Project Github: https://github.com/ethicalhack3r/DVWA
  • Là một project mở, có các ứng dụng mà hầu hết các trang web application cung cấp
  • Có chứa các lỗi bảo mật cơ bản
    • Brute Force
    • Command Injection
    • CSRF
    • File Inclusion
    • File Upload
    • Insecure CAPTCHA
    • SQL Injection
    • SQL Injection (Blind)
    • XSS (Reflected)
    • XSS (Stored)

CÀI ĐẶT

  • Dự định cài đặt
    • Dùng Centos 6.5 (mặc dù HVWA có nói là có thể sử dụng cài đặt với XAMPP nhưng vì có vài phần test bảo mật ví dụ như Command Injection vì vậy sử dụng Centos là phù hợp hơn)
    • Dùng virtual box và Vagrant cài đặt
  • Cài đặt theo hướng dẫn ở README trên github.
      • Trong  https://192.168.33.100/setup.php có các “PHP function” sẽ được thiết lập trong /etc/php.ini
      • Trong  https://192.168.33.100/setup.php có các “PHP module ” sẽ được thiết lập bằng cài đặt them yum.
      • Trong  https://192.168.33.100/setup.php có các “Writable folder “, “Writable file ” nếu không có quyền (màu đỏ) thì có thể dùng: chmod để thay đổi quyền truy cập
      • Trước khi bấm vào [Create/Reset Database] thì phải tạo cơ sở dữ liệu trước ví dụ database: dvwa thì file cấu hình: dvwa/config/config.inc.php:Một số chú ý khi cài đặt
$_DVWA[ ‘db_user’ ] = ‘root’;
$_DVWA[ ‘db_password’ ] = ; //tùy thuộc user root, mặc định cài mysql là rỗng
$_DVWA[ ‘db_database’ ] = ‘dvwa’;

vietnamlab