Xác thực người dùng máy chủ Linux bằng dịch vụ LDAPldap Mục đích Bài thực hành này minh họa việc sử dụng LDAP để xác thực người dùng trên hệ thốngLinux, sao cho nhiều máy tính chia sẻ mộ
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA AN TOÀN THÔNG TIN
BÁO CÁO MÔN HỌC: An toàn ứng dụng web và CSDL
Bài Thực Hành 2:
Ldap , web-brokenaccess, web-sde , db-access
Giảng viên: Vũ Minh Mạnh Sinh viên: Vũ Tuấn Hùng
Mã sinh viên: B21DCAT097
Hà Nội
Trang 2Xác thực người dùng máy chủ Linux bằng dịch vụ LDAP
(ldap)
Mục đích
Bài thực hành này minh họa việc sử dụng LDAP để xác thực người dùng trên hệ thốngLinux, sao cho nhiều máy tính chia sẻ một kho thông tin người dùng và nhóm duynhất, bao gồm cả mật khẩu xác thực người dùng Chiến lược này cho phép người dùng
và quản trị viên quản lý một tập hợp thông tin đăng nhập duy nhất có thể được sửdụng để truy cập vào nhiều máy tính
Yêu cầu đối với sinh viên
Nắm được kiến thức về các kiến thức cơ bản của người dùng, nhóm và xác thực trongLinux, ví dụ như các tệp /etc/passwd và /etc/shadow Ngoài ra, cần có kiến thức cơbản về việc sử dụng Lightweight Directory Access Protocol (LDAP)
Cấu hình mạng (trình bày trong hình topo mạng cho bài lab như dưới đây):
1.1 Cấu hình mạng cho bài lab
Trang 3Mạng gồm một máy khách (client), hai máy chủ (server1 và server2) và một máy chủ LDAP như được hiển thị trong Hình 1 Khi thực hành, sinh viên có một cửa sổ terminal ảo được kết nối với máy tính khách và một cửa sổ terminal ảo được kết nối với máy chủ LDAP Cũng sẽ có các cửa sổ terminal ảo được kết nối với hai máy chủ Tên máy chủ tuân thủ theo sơ đồ Tệp /etc/hosts cho phép sử dụng các tên máy chủ này thay vì các địa chỉ IP cụ thể.
Hai máy chủ Linux đã được cấu hình để sử dụng máy chủ LDAP để xác thực ngườidùng Máy chủ LDAP đã được cấu hình ban đầu với một người dùng duy nhất có ID
là "mike"
Máy chủ LDAP được cấu hình cho miền "example.com", với một quản trị viên LDAP
có tên "admin" và mật khẩu là "adminpass"
Các nhiệm vụ
Nhiệm vụ 1: Tìm hiểu
Trên máy chủ LDAP, hiển thị nội dung thư mục LDAP bằng cách sử dụng lệnh:
ldapsearch -x | less
và quan sát các mục trong thư mục Lưu ý mục cho "mike" và "projx"
Bắt đầu Wireshark trên thành phần LDAP để có thể quan sát giao thức
wireshark &
Chọn thiết bị eth0 Từ máy tính "client", kết nối SSH đến server1 với người dùng
"mike":
ssh mike@server1
Trang 4Mật khẩu ban đầu cho "mike" là "password123" Hệ thống sẽ yêu cầu thay đổi mật
khẩu này, sau đó cần kết nối SSH lại vào server1 Thay đổi mật khẩu thành một mật
khẩu bất kỳ Sử dụng SSH một lần nữa để đăng nhập vào server1 với vai trò là mike,
cung cấp mật khẩu mới Sử dụng lệnh id để xem ID người dùng và nhóm của mình.Sau đó, xem tệp /etc/passwd
Nhiệm vụ 2:Xem lưu lượng giao thức
Chuyển đến cửa sổ Wireshark và dừng việc bắt gói tin (ví dụ: nút dừng màu đỏ) Nhập
bộ lọc hiển thị là "ldap" vào ô gần đầu "Áp dụng bộ lọc hiển thị " Xem lại lưu lượngLDAP Các thành phần nào đang trao đổi gói tin? Tìm gói tin đã thay đổi mật khẩu
Trang 5của mike và sử dụng File / Export Specified Packets để lưu gói tin đó vào tệp có tênpassword.pcapng.
Nhiệm vụ 3: Sử dụng tài khoản mike để truy cập máy chủ còn lại
Thoát khỏi phiên SSH đến server1 bằng cách nhập lệnh "exit" Sau đó, SSH đếnserver2 bằng cách nhập lệnh "ssh mike@server2" Mật khẩu bạn mong đợi sử dụng đểxác thực đến server2 là mật khẩu mới mà bạn đã thay đổi trên server1
Sau khi đăng nhập vào server2, thoát khỏi phiên SSH đó bằng cách nhập lệnh "exit"
Nhiệm vụ 4: Thêm một người dùng LDAP
Trang 6Chuyển đến cửa sổ terminal ảo LDAP và sử dụng lệnh ls để xem danh sách thư mục.Xem tệp có tên mike.ldif, tệp này được sử dụng để định nghĩa người dùng có tên
"mike" Sau đó, xem tệp projx.ldif Lệnh LDAP được sử dụng để thêm mục đã địnhnghĩa trong tệp mike.ldif là:
ldapadd -x -W -D "cn=admin,dc=example,dc=com" -f mike.ldif
Lưu ý cách tùy chọn -D chỉ định tên quản trị viên thực hiện thêm vào LDAP Sử dụnglệnh `man ldapadd` để tìm hiểu thêm về cú pháp của lệnh này Mật khẩu ban đầu chongười dùng mike được tạo bằng lệnh sau:
ldappasswd -s password123 -W -D "cn=admin,dc=example,dc=com" -x
"uid=mike,ou=users,dc=example,dc=com"
Tạo các tệp ldif để định nghĩa một nhóm mới có tên "qa" và một người dùng mới có
ID là "mary" Gán mary vào nhóm qa Chú ý điều chỉnh các giá trị uidNumber vàgidNumber Sử dụng lệnh ldapadd để thêm nhóm mới và người dùng mới Sử dụnglệnh ldappasswd để gán mật khẩu ban đầu cho mary Một lần nữa, mật khẩu cho quản
trị viên LDAP là "adminpass".
Trang 7- Thêm nhóm "qa" vào LDAP
ldapadd -x -W -D "cn=admin,dc=example,dc=com" -f qa.ldif
- Thêm người dùng "mary":
ldapadd -x -W -D "cn=admin,dc=example,dc=com" -f mary.ldif
- Đặt mật khẩu cho mary:
ldappasswd -s password123 -W -D "cn=admin,dc=example,dc=com" -x
"uid=mary,ou=users,dc=example,dc=com"
- Kiểm tra kết nối SSH với người dùng "mary"
ssh mary@server1 ssh mary@server2
Sau đó, chuyển đến máy khách và kiểm tra khả năng để SSH với vai trò là mary đến
cả server1 và server2
Nhiệm vụ 5: Mã hóa dữ liệu truyền LDAP
Quay trở lại cửa sổ Wireshark và thiết lập bộ lọc hiển thị gói tin làldap.bindRequest_element Khám phá các thành phần giao thức của một yêu cầu bind
sử dụng Wireshark Có thấy điều gì đáng lo ngại không? Mật khẩu người dùng đượctruyền đi dưới dạng văn bản thuần!
Trang 8Khởi động lại việc bắt gói tin trong Wireshark, tức là nhấn vào nút hình cá mập bêntrái và xóa bộ lọc.
Máy chủ LDAP có một chứng chỉ PKI tự ký và đã được cấu hình để chấp nhận lưulượng SSL được mã hóa cũng như lưu lượng không được mã hóa mà bạn đã quan sát
Trang 9Ban đầu, chúng ta không mã hóa lưu lượng để có thể xem giao thức Bây giờ, ta sẽcấu hình các máy khách LDAP (tức là hai máy chủ) để giao tiếp với LDAP thông quaSSL.
Cơ chế để yêu cầu một máy khách LDAP sử dụng SSL (hoặc TLS) khác nhau tùythuộc vào sản phẩm LDAP và phiên bản Linux Đối với các máy chủ Ubuntu này,thực hiện các bước sau:
Chỉnh sửa tệp /etc/ldap.conf và thay đổi dòng sau:
Trang 10Khám phá điều khiển truy cập bị lỗi
(web-brokenaccess)
1 Mục đích
Bài tập Labtainer này khám phá Kiểm soát truy cập bị hỏng Kiểm soát truy cập bị hỏng xảy ra khi ứng dụng cho phép người dùng thực hiện các hành động trái phép Có nhiều lỗ hổng góp phần gây ra rủi ro này, chẳng hạn như nếu nhà phát triển quên xác thực quyền.
2 Yêu cầu đối với sinh viên:
Nắm được kiến thức cơ bản về hoạt động của ứng dụng web, biết sử dụng OWASP ZAP.
1 Nội dung thực hành
Sinh viên khởi động bài lab bằng câu lệnh:
labtainer web-brokenaccess
(chú ý: sinh viên sử dụng tên tài khoản của mình để nhập thông tin email người thực hiện bài lab khi
có yêu cầu trong terminal, để sử dụng khi chấm điểm Thông thường tên tài khoản của sinh viên chính
Trang 11● Sử dụng lệnh ping từ máy sinh viên để xác nhận kết nối
ping 192.168.99.100
Task 2: Mở FireFox và truy cập vào webserver
● Tại cửa sổ student gõ lệnh sau
Trang 12● Ở cửa sổ dòng lệnh trên máy trạm của sinh viên, nhập:
owasp-zap &
Lưu ý: Nếu Firefox đang chạy trên cửa sổ dòng lệnh và không có dấu "&" được baogồm, thì Firefox sẽ không chạy trong nền Đóng Firefox và mở lại bằng cách sử dụng
"Firefox &" trên cửa sổ dòng lệnh
Ứng dụng OWASP ZAP sẽ mở và yêu cầu người dùng nhập thông tin
Nhập vào ứng dụng OWASP ZAP: chọn "yes, I want to persist this session with thename based on the current timestamp" sau đó nhấp vào start Nếu được yêu cầu
"Manage Add-on", hãy nhấp vào close
Task 4: Cấu hình FireFox proxy để sử dụng OWASP ZAP
Mục tiêu của nhiệm vụ này là cài đặt OWASP ZAP để hoạt động và cho phép bắt gói tin từ máy tính sinh viên trên trình duyệt web-xss Trong phần thiết lập của Firefox, cấu hình theo các bước sau đây:
● Trên Firefox của máy tính sinh viên, mở "Preferences"
● Trong cửa sổ tìm kiếm, gõ "proxy"
● Trong Cài đặt proxy mạng, chọn "Cài đặt"
● Chọn "Cấu hình proxy thủ công"
● Trong phần Proxy HTTP: sử dụng "127.0.0.1" và Cổng "8080"
● Cũng chọn "Sử dụng máy chủ proxy này cho tất cả các giao thức"
● Nhấp vào "ok" để chấp nhận các cài đặt
Cài đặt trên đảm bảo Firefox sử dụng OWASP Zap làm proxy Thực hiện các bước sau để đảm bảo Firefox đang kết nối và sử dụng ZAP như là proxy:
● Làm mới trang web "192.168.99.100:3000"
● Một cảnh báo bảo mật với thông báo "Kết nối của bạn không an toàn" sẽ đượchiển thị
● Phải chấp nhận thông báo cảnh báo này Để làm điều đó, nhấp vào "Advanced"
● Nó sẽ hiển thị chứng chỉ SSL và nên hiển thị "SEC_ERROR_UNKOWN
ISSUE" Bấm "Add Exception" để sử dụng chứng chỉ này
● Một cửa sổ xác nhận sẽ hiện ra, xác nhận ngoại lệ bằng cách nhấp vào
"Confirm Security Exception"
Task 5: Truy cập vào dữ liệu bị hạn chế
Mục tiêu của phần này là xem xét quyền truy cập được phép và xác định ngay cả khibạn có thể truy cập vào một khu vực bị hạn chế thì bạn có được phép làm bất cứ điều
gì không Theo OWASP WSTG-ATHZ-01, một trong những nhiệm vụ đầu tiên khi
Trang 13xem xét một trang web là xem bạn có quyền truy cập vào các URL và thư mục nào.Thực hiện một cuộc khảo sát cơ bản của trang web bằng cách sử dụng một công cụthu thập dữ liệu trên trang web là phương pháp ưu tiên để thu thập dữ liệu trên trangweb.
Ví dụ 1 - Path Traversal
Scan một trang web để xác định xem những đường dẫn nào có thể truy cập được:
● Mở OWASP Zap và thực hiện quét trang web trên địa chỉ IP:
192.168.99.100:3000
● Dưới phần alert, bạn nên thấy một phần được ghi là Path Traversal, hãy xem xem có thể thấy những đường dẫn nào được bảo vệ bằng mật khẩu hoặc đượcbảo mật
● Cần tìm đường dẫn tới trang quản trị
● Hãy lưu kết quả quét của OWASP Zap, lưu nó trên màn hình desktop và đặt tên là "traversal.html" nếu traversal không phải là một tùy chọn, hãy lưu toàn
bộ báo cáo
Task 6: Tự tạo tài khoản cho quản trị viên
Mục đích của nhiệm vụ này là để xem xét xem có lỗ hổng nào có thể cho phép tạo tàikhoản quản trị viên khi không nên có tùy chọn đó Theo OWASP WSTG-ATHN-06,theo dõi bộ nhớ cache và các phần tử để xem chúng có thể thực hiện các yêu cầu PUT/ GET hoặc truy cập vào trang web hoặc API cho phép thực hiện việc tạo tài khoản admin
Ví dụ 1 - Sửa đổi yêu cầu POST để tạo tài khoản quản trị viên
Làm theo các bước được liệt kê dưới đây để bắt và sửa đổi yêu cầu POST khi tạo người dùng mới
● Sử dụng OWASP-ZAP, tạo một người dùng mới Đăng nhập với người dùngmới
● Tại trang đăng ký người dùng Có thể điền thông tin sau đây:
o Email: test@noemail.com
o Password: Password#1
o Nhập lại mật khẩu: Password#1
o Câu hỏi bảo mật: Name of your favorite Pet?
o Trả lời: Dogs
Tìm HTTP request trong tab History: "http://192.168.99.100:3000/rest/user/whoami".Sao chép trường Authorization lên đến hết ngoại trừ phần Connection: keep-alive vàoclipboard
Trang 14Tại phần Sites, tìm đường dẫn tới http://192.168.99.100:3000 -> user -> POST:Login Nhấp chuột phải, chọn Open/Resend with Request Editor.
Sửa đổi HTTP request line thành: GET http://192.168.99.100:3000/api/Users Sau đó xóa trường Cookie và paste phần Authorization vừa copy bên trên
Thay đổi email thành một email mới, chưa từng dùng và chọn “Send” Phản hồi sẽ liệt
kê danh sách tất cả các tài khoản người dùng
Lưu ý: Bạn có thể chỉ cần thực hiện POST thay vì GET nếu bạn không muốn có danhsách tài khoản người dùng Thực hiện điều này sẽ thêm tài khoản mới không phải quản trị viên vào hệ thống
Cuối cùng, thêm vào phần body: "role":"admin" và chuyển lại thành method POST, phần path là api/Users Người dùng sẽ được tạo mới, nhưng chưa thể chắc chắn
trường “role” có tồn tại hay người dùng mới là một quản trị viên hay chưa
Trong thanh địa chỉ của Firefox, truy cập URL sau để xem thông tin tài khoản mới đã xuất hiện hay chưa:
http://192.168.99.100:3000/rest/products/search?q=qwert')) UNION SELECT id, email, password, '4', '5', '6','7', '8', '9' FROM Users
Đăng nhập bằng tài khoản mới này và xác minh xem nó có phải là một quản trị viên bằng cách truy cập: https://192.168.99.100:3000/#/administration
Task 7: Bỏ qua xác thực
Mục tiêu của tác vụ này là tìm cách vượt qua yêu cầu đăng nhập của người dùng theo cách truyền thống
Ví dụ 1 - Vượt qua xác thực người dùng bằng cách sử dụng hai dấu gạch ngang
Chỉ cần thêm ' (ví dụ: admin@juice.org' ) vào cuối bất kỳ người dùng nào, điều nàycho phép đăng nhập bằng bất kỳ mật khẩu nào
Thử đăng nhập bằng tài khoản jim@juice.org' và sử dụng mật khẩu bất kỳ
Các người dùng khác nào dễ bị bỏ qua xác thực kiểu này? Sử dụng danh sách người dùng bên dưới và xem xét những người dùng nào cho phép lợi dụng này hoạt động
Trang 15Ví dụ 2 - Bỏ qua email người dùng bằng cách sử dụng tên
Sau khi hoàn thành ví dụ 1 và thấy được hậu quả mà hai dấu gạch ngang có thể gây ra Hãy xem xem chúng ta có thể đăng nhập bằng tên người dùng thay vì địa chỉ email.Tại trang đăng nhập, nhập: ('%jim%');
Chọn bất kỳ mật khẩu nào, đăng nhập có hoạt động không?
Liệu có người dùng nào trong danh sách bên dưới cho phép đăng nhập?
Trang 16Task 8: Giả mạo tài khoản
Mục tiêu của phần này là xem liệu bạn có thể đăng nhập vào một tài khoản khác để đăng bình luận Theo OWASP WSTG-ATHZ-02, một phương pháp kiểm thử phổ biến là đảm bảo rằng mỗi phiên là chỉ có thể truy cập bởi chủ sở hữu của phiên đó và các nhiệm vụ được thực hiện bởi chủ sở hữu phiên chỉ ảnh hưởng trực tiếp đến ngườidùng đó Phần này sẽ xem xét xem liệu có thể truy cập các chức năng và tài nguyên
mà chỉ nên được truy cập bởi người dùng với vai trò hoặc đặc quyền khác
Ví dụ 1 - đăng nhập giả mạo:
Trên trình duyệt Firefox, truy cập vào phản hồi của khách hàng Nếu cần, đăng nhập với tài khoản jim để xem trang này
Trên trình duyệt Firefox, để lại một bình luận dưới phần bình luận Ghi nhớ tên tác giả Điền vào đánh giá và mã CAPTCHA, nhưng chưa bấm nút Gửi
Trong OWASP ZAP, bật tính năng intercept
Trên trình duyệt Firefox, bấm nút Gửi
Trong OWASP ZAP, sẽ hiển thị HTTP request đã bị chặn
Lưu ý: CAPTCHA có thể khác
Cách đọc dòng trên:
UserID: 1 - đây là ID của người dùng đăng bình luận
captchaId: 1 - đây là câu hỏi CAPTCHA
captcha: 30 - đây là câu trả lời của CAPTCHA
comment: "comment entered (.org)" - đây là nội dung bình luận
“rating”:4 - đây là đánh giá đã được đăng
Sửa User ID thành ID của user khác
Trang 17Kiểm tra phản hồi tại đường link sau để xem liệu người dùng đã đăng nhập vào tài khoản nào hay tài khoản Jim hoặc Admin đã đăng bình luận Đường dẫn là:
http://192.168.99.100:3000/#/administration
Trang 18Task 9: Đăng nhập tài khoản và phá vỡ mật khẩu
Cơ chế xác thực phổ biến nhất và dễ quản trị nhất là mật khẩu tĩnh Theo OWASP WSTG-ATHN-07, có thể chống lại các dạng tấn công mật khẩu phổ biến bằng cách đánh giá độ dài, độ phức tạp, sự tái sử dụng và yêu cầu thay đổi mật khẩu Có thể lấybăm và chạy nó qua một rainbow table hoặc thậm chí là tìm kiếm đơn giản trên
Ví dụ 1 - Đăng nhập người dùng
Trong phần 4.5, trình duyệt web tìm thấy một số URL, trong đó có phần chi tiết xác thực Loại khai thác này có thể không hoạt động,nếu giá trị băm không có thì chuyển sang task tiếp theo
Trong Firefox, nhấp chuột phải và chọn "inspect element" trong tab network, tìm kiếmhttps://192.168.99.100:3000/rest/user/authentication-details/
• Các phản hồi cho cuộc gọi sẽ có dạng như sau: [ ]