1. Giới thiệu:
Sự leo thang đặc quyền có thể hiểu đơn giản là một phương thức tấn công mà với cách này, các User có quyền hạn thấp hơn sẽ tấn công vào một điểm dễ bị tổn thương nhất của hệ thống để trở thành một người quản trị hoặc có thể trở thành các User có quyền hạn cao hơn. Cách để leo thang đặc quyền mà ta có thể nghĩ ngay đến đó là việc chiếm quyền thông qua crack password của người quản trị, tấn công tràn bộ đệm của máy đó và ăn cắp password. Bài phân tích này sẽ đưa ra một điểm yếu chung mà có thể được khai thác để ăn cắp password và sau đó là leo thang đặc quyền. Và cũng qua bài phân tích này, chúng ta sẽ thấy được các nhược điểm của các hệ thống từ đó đánh giá đúng hơn về việc tấn công leo thang đặc quyền và tầm quan trọng của việc tiến hành vá lỗi liên tục cho hệ thống.
2. Yếu điểm để tấn công:
Khi các server và các ứng dụng lưu trữ password được mã hoá hoặc dạng số trong ổ cứng, chúng ta thấy rằng trong một vài trường hợp thì việc mã hoá không được áp dụng cho việc lưu trữ password trong bộ nhớ. Các truy cập thông thường đến bộ nhớ không bị giới hạn bởi các quyền truy cập của các nhóm user. Chính vì vậy, các attackers với các truy cập vào hệ thống có thể đọc được bộ nhớ và các password không mã hoá. Việc sử dụng các chương trình truy cập trực tiếp vào bộ nhớ sẽ giúp cho các Attacker kiểm soát được việc xử lý trong một vùng nhớ nào đó và có thể đọc các thông tin của password này. Các password có thể là password quản trị của một server, một password của user cho các ứng dụng hoặc là một password cho cơ sở dữ liệu. Và chỉ cần phát hiện ra được một Password cho ứng dụng thì coi như việc tấn công leo thang đặc quyền đã thành công. Vì vậy bất cứ ứng dụng nào mà việc sử dụng các password cho việc xác thực không được mã hoá thì đều có thể được xem như là một điểm yếu của hệ thống và tại đây việc tấn công leo thang đặc quyền đều có thể xảy ra.
3. Vị trí của Password trong bộ nhớ:
Một chương trình hiển thị bộ nhớ sẽ đưa ra toàn bộ các đoạn mã và các dữ liệu được xử lý tại memory. Dữ liệu chung là tương đối lớn và có thể bao gồm cả các dữ liệu được mã hoá cũng như các dữ liệu ở dạng Text. Password có thể nằm trong bộ nhớ tại hai vị trí sau:
4. Password sẽ được lưu trong bộ nhớ khi nào ?
Hãy xem qua ví dụ sau đây và bạn sẽ hiểu được khi nào thì password sẽ được lưu vào bộ nhớ:
Khi một ứng dụng tại server được khởi động, nó sẽ đọc các đối số trong các dòng lệnh của Java và các biến môi trường và kết nối đến một cổng TCP. Ứng dụng sẽ xác định hệ điều hành mà user sử dụng và nhóm làm việc (thực hiện xác thực). Ứng dụng cũng sẽ kiểm tra một file cấu hình để lấy tất cả các thông tin cấu hình của nó.
Trong lúc khởi động, server tải password của người quản trị vào trong bộ nhớ dưới dạng Plain text. Trong số trường hợp khác, file cấu hình có thể cung cấp thông tin để kết nối đến các nguồn CSDL bao gồm cả password để đăng nhập vào CSDL. Server cũng tải các password vào bộ nhớ dưới dạng plain text. Một số lựa chọn khác cho phép password có thể không được load khi server được khởi động nhưng nó vẫn xuất hiện trong bộ nhớ khi người quản trị hoặc một user đã được xác thực. Sau đó, password sẽ vẫn được lưu trong bộ nhớ mặc dù user đó đã log out.
5. Thực nghiệm:
Chúng ta hãy thực hiện một thực nghiệm sau để chứng tỏ vấn đề trên. Tuy nhiên có thể bạn sẽ không thể thành công ngay lần đầu tiên. Bạn có thể tiến hành như sau:
Ø Xác định một server, một server ứng dụng hoặc là một webserver. Server tải các password quản trị vào bộ nhớ khi nó được khởi động, Các attacker sẽ sử dụng các tài khoản của họ để đăng nhập vào hệ thống và mở một chwong trình hiển thị thông tin bộ nhớ. Với các chương trình hiển thị thông tin bộ nhớ, họ có thể xem được các thông tin về password của các user. Sau khi đã biết được các thông số đó, cuộc tấn công leo thang đặc quyền sẽ được thực hiện.
Ø Trong một trường hợp khác, server không load password lúc khởi động, nhưng nó sẽ được load vào bộ nhớ khi người quản trị được xác thực. Sau đó pass này sẽ được lưu trữ trong suốt quá trình server chạy. Mặc dù việc truy cập của người quản trị là thông qua truy cập từ xa nhưng bộ nhớ của server vẫn lưu trữ password dưới dạng plain text và có thể được phát hiện.
Ø Và sau đây là trường hợp mà các password của một CSDL bị các attacker tấn công. Phát hiện một server được sử dụng để lưu trữ CSDL. Các kết nối đến nguồn sẽ bao gồm thông tin về username và password của CSDL. Khi server được khởi động nó sẽ load password của cơ sở dữ liệu vào bộ nhớ khi kết nối đến nguồn. Tương tự như trên, chỉ cần sử dụng các chương trình hiển thị thông tin bộ nhớ và tìm kiếm password.
Để thực hiện những gì đã nói trên, tại ví dụ, tôi sử dụng chương trình MySQL, và Winhex.
Sau khi cài đặt MySQL, tôi đặt user và pass là admin/adminvn. Thực hiện đăng nhập như là một hành động của một nhà quản trị mạng. Sau đó Log out, lúc này, tôi cũng đóng vai Attacker đã tiếp cận được Server về mặt vật lý. Tôi cho chạy chương trình Winhex. Lưu ý chương trình này có thể chạy mà không cần phải cài đặt. Sau khi chạy chương trình, tại cửa sổ Winhex, chọn Tools > RAM Editor > WinmySQLAdmin > sau đó tìm user Admin (Bạn có thể xem hình)... Như vậy đã thành công
6. Vấn đề mất password
Đây là một vấn đề được nhắc đến nhiều trong việc hạn chế các tấn công của attacker. Nhân đây cũng nhắc lại về vấn đề này luôn, bạn có thể chú ý một số điểm sau:
- Thay đổi password thường xuyên để không bị mất password.
- Các password cần được đặt gồm đủ các ký tự cả số, không nên đặt password có liên quan đến bản thân vì như vậy làm tăng nguy cơ password bị attacker đoán được.
- Nên xoá các user không cần thiết sử dụng nếu như thật sự không cần nhằm giảm nguy cơ bị tấn công leo thang đặc quyền.
- Một số lưu ý nữa bạn có thể tham khảo thêm các chủ đề liên quan.
7. Vấn đề về tấn công điểm yếu:
Cách tốt nhất để hạn chế đến mức tối đa vấn đề đã được nêu trên đó là:
- Không cho người lạ mặt tìm hiểu về hệ thống và có các tác động vật lý vào server.
- Thiết lập quyền không cho cài đặt các chương trình lạ đối với các user không tin cậy vào máy server.
Trung Nghĩa (Nguồn Internet)
Sự leo thang đặc quyền có thể hiểu đơn giản là một phương thức tấn công mà với cách này, các User có quyền hạn thấp hơn sẽ tấn công vào một điểm dễ bị tổn thương nhất của hệ thống để trở thành một người quản trị hoặc có thể trở thành các User có quyền hạn cao hơn. Cách để leo thang đặc quyền mà ta có thể nghĩ ngay đến đó là việc chiếm quyền thông qua crack password của người quản trị, tấn công tràn bộ đệm của máy đó và ăn cắp password. Bài phân tích này sẽ đưa ra một điểm yếu chung mà có thể được khai thác để ăn cắp password và sau đó là leo thang đặc quyền. Và cũng qua bài phân tích này, chúng ta sẽ thấy được các nhược điểm của các hệ thống từ đó đánh giá đúng hơn về việc tấn công leo thang đặc quyền và tầm quan trọng của việc tiến hành vá lỗi liên tục cho hệ thống.
2. Yếu điểm để tấn công:
Khi các server và các ứng dụng lưu trữ password được mã hoá hoặc dạng số trong ổ cứng, chúng ta thấy rằng trong một vài trường hợp thì việc mã hoá không được áp dụng cho việc lưu trữ password trong bộ nhớ. Các truy cập thông thường đến bộ nhớ không bị giới hạn bởi các quyền truy cập của các nhóm user. Chính vì vậy, các attackers với các truy cập vào hệ thống có thể đọc được bộ nhớ và các password không mã hoá. Việc sử dụng các chương trình truy cập trực tiếp vào bộ nhớ sẽ giúp cho các Attacker kiểm soát được việc xử lý trong một vùng nhớ nào đó và có thể đọc các thông tin của password này. Các password có thể là password quản trị của một server, một password của user cho các ứng dụng hoặc là một password cho cơ sở dữ liệu. Và chỉ cần phát hiện ra được một Password cho ứng dụng thì coi như việc tấn công leo thang đặc quyền đã thành công. Vì vậy bất cứ ứng dụng nào mà việc sử dụng các password cho việc xác thực không được mã hoá thì đều có thể được xem như là một điểm yếu của hệ thống và tại đây việc tấn công leo thang đặc quyền đều có thể xảy ra.
3. Vị trí của Password trong bộ nhớ:
Một chương trình hiển thị bộ nhớ sẽ đưa ra toàn bộ các đoạn mã và các dữ liệu được xử lý tại memory. Dữ liệu chung là tương đối lớn và có thể bao gồm cả các dữ liệu được mã hoá cũng như các dữ liệu ở dạng Text. Password có thể nằm trong bộ nhớ tại hai vị trí sau:
- Bằng cách tìm các password tại các vị trí cố định trong bộ nhớ. Tất cả các cài đặt của các chương trình ứng dụng bao gồm cả các password đều được đặt tại một vị trí cố định trong bộ nhớ. Ví dụ, tất cả các truy cập của một server đều được lưu trữ password tại vị trí 10BD862C. Khi địa chỉ này được xác định thì password có thể được giải mã ra từ bộ nhớ nếu một Attacker có thể đọc được các thông tin trong bộ nhớ. Để phát hiện vị trí của một password của một ứng dụng, các attacker có thể tự cài đặt một ứng dụng tương tự trên hệ thống của họ, sau đó sẽ tìm kiếm vị trí của password trong bộ nhớ, sau khi tìm xong, attacker có thể sử dụng vị trí đó để có thể tiến hành tìm kiếm password trên máy của nạn nhân.
- Một cách khác đó là attacker sẽ sử dụng các tên của User và Password dùng chung của cùng một hệ thống. Ví dụ, các attacker có thể tạo ra các mẫu User và Password trên hệ thống của họ, sau đó dùng các chương trình hiển thị giá trị của bộ nhớ, và tìm đến vị trí của các user mẫu, ví dụ tên “Admin”, “Administrator”, “Administrators”,… và như vậy sẽ kiếm được các thông tin về các giá trị này.
4. Password sẽ được lưu trong bộ nhớ khi nào ?
Hãy xem qua ví dụ sau đây và bạn sẽ hiểu được khi nào thì password sẽ được lưu vào bộ nhớ:
Khi một ứng dụng tại server được khởi động, nó sẽ đọc các đối số trong các dòng lệnh của Java và các biến môi trường và kết nối đến một cổng TCP. Ứng dụng sẽ xác định hệ điều hành mà user sử dụng và nhóm làm việc (thực hiện xác thực). Ứng dụng cũng sẽ kiểm tra một file cấu hình để lấy tất cả các thông tin cấu hình của nó.
Trong lúc khởi động, server tải password của người quản trị vào trong bộ nhớ dưới dạng Plain text. Trong số trường hợp khác, file cấu hình có thể cung cấp thông tin để kết nối đến các nguồn CSDL bao gồm cả password để đăng nhập vào CSDL. Server cũng tải các password vào bộ nhớ dưới dạng plain text. Một số lựa chọn khác cho phép password có thể không được load khi server được khởi động nhưng nó vẫn xuất hiện trong bộ nhớ khi người quản trị hoặc một user đã được xác thực. Sau đó, password sẽ vẫn được lưu trong bộ nhớ mặc dù user đó đã log out.
5. Thực nghiệm:
Chúng ta hãy thực hiện một thực nghiệm sau để chứng tỏ vấn đề trên. Tuy nhiên có thể bạn sẽ không thể thành công ngay lần đầu tiên. Bạn có thể tiến hành như sau:
Ø Xác định một server, một server ứng dụng hoặc là một webserver. Server tải các password quản trị vào bộ nhớ khi nó được khởi động, Các attacker sẽ sử dụng các tài khoản của họ để đăng nhập vào hệ thống và mở một chwong trình hiển thị thông tin bộ nhớ. Với các chương trình hiển thị thông tin bộ nhớ, họ có thể xem được các thông tin về password của các user. Sau khi đã biết được các thông số đó, cuộc tấn công leo thang đặc quyền sẽ được thực hiện.
Ø Trong một trường hợp khác, server không load password lúc khởi động, nhưng nó sẽ được load vào bộ nhớ khi người quản trị được xác thực. Sau đó pass này sẽ được lưu trữ trong suốt quá trình server chạy. Mặc dù việc truy cập của người quản trị là thông qua truy cập từ xa nhưng bộ nhớ của server vẫn lưu trữ password dưới dạng plain text và có thể được phát hiện.
Ø Và sau đây là trường hợp mà các password của một CSDL bị các attacker tấn công. Phát hiện một server được sử dụng để lưu trữ CSDL. Các kết nối đến nguồn sẽ bao gồm thông tin về username và password của CSDL. Khi server được khởi động nó sẽ load password của cơ sở dữ liệu vào bộ nhớ khi kết nối đến nguồn. Tương tự như trên, chỉ cần sử dụng các chương trình hiển thị thông tin bộ nhớ và tìm kiếm password.
Để thực hiện những gì đã nói trên, tại ví dụ, tôi sử dụng chương trình MySQL, và Winhex.
Sau khi cài đặt MySQL, tôi đặt user và pass là admin/adminvn. Thực hiện đăng nhập như là một hành động của một nhà quản trị mạng. Sau đó Log out, lúc này, tôi cũng đóng vai Attacker đã tiếp cận được Server về mặt vật lý. Tôi cho chạy chương trình Winhex. Lưu ý chương trình này có thể chạy mà không cần phải cài đặt. Sau khi chạy chương trình, tại cửa sổ Winhex, chọn Tools > RAM Editor > WinmySQLAdmin > sau đó tìm user Admin (Bạn có thể xem hình)... Như vậy đã thành công
6. Vấn đề mất password
Đây là một vấn đề được nhắc đến nhiều trong việc hạn chế các tấn công của attacker. Nhân đây cũng nhắc lại về vấn đề này luôn, bạn có thể chú ý một số điểm sau:
- Thay đổi password thường xuyên để không bị mất password.
- Các password cần được đặt gồm đủ các ký tự cả số, không nên đặt password có liên quan đến bản thân vì như vậy làm tăng nguy cơ password bị attacker đoán được.
- Nên xoá các user không cần thiết sử dụng nếu như thật sự không cần nhằm giảm nguy cơ bị tấn công leo thang đặc quyền.
- Một số lưu ý nữa bạn có thể tham khảo thêm các chủ đề liên quan.
7. Vấn đề về tấn công điểm yếu:
Cách tốt nhất để hạn chế đến mức tối đa vấn đề đã được nêu trên đó là:
- Không cho người lạ mặt tìm hiểu về hệ thống và có các tác động vật lý vào server.
- Thiết lập quyền không cho cài đặt các chương trình lạ đối với các user không tin cậy vào máy server.
Trung Nghĩa (Nguồn Internet)
Comment