Tôi là người gốc. Tìm hiểu nâng cao đặc quyền của hệ điều hành Linux

Tôi đã dành quý đầu tiên của năm 2020 để chuẩn bị cho kỳ thi OSCP. Tìm kiếm thông tin trên Google và rất nhiều nỗ lực "mù quáng" đã chiếm hết thời gian rảnh rỗi của tôi. Hóa ra là đặc biệt khó hiểu các cơ chế để leo thang đặc quyền. Khóa học PWK rất chú trọng đến chủ đề này, nhưng tài liệu về phương pháp luôn không đủ. Có rất nhiều hướng dẫn trên Internet với các lệnh hữu ích, nhưng tôi không phải là người ủng hộ việc làm theo các khuyến nghị một cách mù quáng mà không hiểu điều này sẽ dẫn đến đâu.

Tôi muốn chia sẻ với bạn những gì tôi đã học được trong quá trình chuẩn bị và vượt qua kỳ thi thành công (bao gồm cả các cuộc đột kích định kỳ trên Hack The Box). Tôi cảm thấy biết ơn sâu sắc đối với từng chút thông tin đã giúp tôi đi trên con đường Try Harder một cách có ý thức hơn, giờ là lúc tôi phải trả lại cho cộng đồng.

Tôi muốn cung cấp cho bạn hướng dẫn về leo thang đặc quyền trong OS Linux, hướng dẫn này bao gồm phân tích các vectơ phổ biến nhất và các tính năng liên quan mà bạn chắc chắn sẽ cần. Thông thường, bản thân các cơ chế leo thang đặc quyền khá đơn giản, khó khăn phát sinh khi cấu trúc và phân tích thông tin. Do đó, tôi quyết định bắt đầu với một "chuyến tham quan" và sau đó xem xét từng vectơ trong một bài báo riêng biệt. Tôi hy vọng tôi sẽ giúp bạn tiết kiệm thời gian để nghiên cứu chủ đề.

Tôi là người gốc. Tìm hiểu nâng cao đặc quyền của hệ điều hành Linux

Vì vậy, tại sao thậm chí có thể leo thang đặc quyền vào năm 2020 nếu các phương pháp này đã được biết đến từ rất lâu? Trên thực tế, nếu người dùng xử lý hệ thống một cách chính xác, thì thực sự sẽ không thể tăng các đặc quyền trong đó. Vấn đề toàn cầu chính dẫn đến những cơ hội như vậy là cấu hình không an toàn. Sự hiện diện của các phiên bản phần mềm lỗi thời chứa các lỗ hổng trong hệ thống cũng là một trường hợp đặc biệt của cấu hình không an toàn.

Leo thang đặc quyền thông qua cấu hình không an toàn

Trước hết, hãy xử lý cấu hình không an toàn. Hãy bắt đầu với Các chuyên gia CNTT thường sử dụng các hướng dẫn sử dụng và tài nguyên như stackoverflow, nhiều trong số đó chứa các lệnh và cấu hình không an toàn. Một ví dụ nổi bật là tin tức rằng mã được sao chép nhiều nhất từ ​​stackoverflow có lỗi. Một quản trị viên có kinh nghiệm sẽ nhìn thấy sự lộn xộn, nhưng đây là trong một thế giới lý tưởng. Ngay cả các chuyên gia có thẩm quyền tăng khối lượng công việc có khả năng phạm sai lầm. Hãy tưởng tượng rằng quản trị viên đang chuẩn bị và phê duyệt tài liệu cho lần đấu thầu tiếp theo, đồng thời nghiên cứu kỹ công nghệ mới sẽ được giới thiệu trong quý tới, đồng thời giải quyết định kỳ các nhiệm vụ hỗ trợ người dùng. Và sau đó, anh ta được giao nhiệm vụ nhanh chóng tạo ra một vài máy ảo và triển khai các dịch vụ trên chúng. Bạn nghĩ gì, xác suất mà quản trị viên đơn giản là không nhận thấy sự ồn ào là gì? Sau đó, các chuyên gia thay đổi, nhưng các nạng vẫn còn, trong khi các công ty luôn cố gắng giảm thiểu chi phí, bao gồm cả chi phí cho các chuyên gia CNTT.

Vỏ giả và bẻ khóa

Shell hệ thống thu được trong giai đoạn sản xuất thường bị hạn chế, đặc biệt nếu bạn lấy được nó bằng cách hack một người dùng máy chủ web. Ví dụ: các hạn chế của shell có thể ngăn bạn sử dụng lệnh sudo khi gặp lỗi:

sudo: no tty present and no askpass program specified

Sau khi có trình bao, tôi khuyên bạn nên tạo một thiết bị đầu cuối chính thức, ví dụ như với Python.

python -c 'import pty;pty.spawn("/bin/bash")'

Bạn hỏi: "Tại sao tôi cần một nghìn lệnh, nếu tôi có thể sử dụng một lệnh chẳng hạn để truyền tệp?" Thực tế là các hệ thống được cấu hình khác nhau, Python có thể không được cài đặt trên máy chủ tiếp theo, nhưng có thể có Perl. Kỹ năng là có thể làm những việc quen thuộc trong hệ thống mà không cần các công cụ quen thuộc. Một danh sách đầy đủ các tính năng có thể được tìm thấy đây.

Có thể thu được vỏ đặc quyền thấp bằng cách sử dụng đội 1 и đội 2 (đáng ngạc nhiên là ngay cả GIMP).

Xem lịch sử lệnh

Linux thu thập lịch sử của tất cả các lệnh đã thực thi trong một tệp ~ / .bash_history. Nếu máy chủ đang được sử dụng và lịch sử của nó không bị xóa, thì rất có thể thông tin đăng nhập được tìm thấy trong tệp này. Xóa lịch sử về cơ bản là bất tiện. Tất nhiên, nếu quản trị viên buộc phải chọn các lệnh mười cấp thông qua , thì việc gọi lệnh này từ lịch sử sẽ thuận tiện hơn cho anh ta hơn là nhập lại. Thêm vào đó, nhiều người không biết về "hack" này. Nếu có các vỏ thay thế như Zsh hoặc Fish trong hệ thống, thì chúng có lịch sử riêng. Để hiển thị lịch sử của các lệnh trong bất kỳ trình bao nào, chỉ cần nhập lịch sử lệnh.

cat ~/.bash_history
cat ~/.mysql_history
cat ~/.nano_history
cat ~/.php_history
cat ~/.atftp_history

Có chia sẻ lưu trữ, trong đó máy chủ được sử dụng để lưu trữ một số trang web. Thông thường, với cấu hình này, mỗi tài nguyên có người dùng riêng với một thư mục chính riêng biệt và một máy chủ ảo. Vì vậy, nếu cấu hình sai, bạn có thể tìm thấy tệp .bash_history trong thư mục gốc của tài nguyên web.

Tìm mật khẩu trong hệ thống tệp và tấn công vào các hệ thống liền kề

Người dùng hiện tại của bạn có thể đọc được các tệp cấu hình cho các dịch vụ khác nhau. Trong đó, bạn có thể tìm thấy thông tin đăng nhập ở dạng văn bản rõ ràng - mật khẩu để truy cập cơ sở dữ liệu hoặc các dịch vụ liên quan. Có thể sử dụng cùng một mật khẩu để truy cập cơ sở dữ liệu và ủy quyền cho người dùng gốc (nhân sự thông tin xác thực).
Điều xảy ra là thông tin đăng nhập được tìm thấy thuộc về các dịch vụ trên các máy chủ khác. Sự phát triển của một cuộc tấn công vào cơ sở hạ tầng thông qua một máy chủ bị xâm nhập không tệ hơn việc khai thác các máy chủ khác. Các hệ thống liền kề cũng có thể được tìm thấy bằng cách tra cứu địa chỉ IP trong hệ thống tệp.

grep -lRi "password" /home /var/www /var/log 2>/dev/null | sort | uniq #Find string password (no cs) in those directories
grep -a -R -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' /var/log/ 2>/dev/null | sort -u | uniq #IPs inside logs

Nếu máy chủ bị xâm nhập có một ứng dụng web có thể truy cập được từ Internet, thì tốt hơn là loại trừ nhật ký của nó khỏi quá trình tìm kiếm địa chỉ IP. Địa chỉ của người dùng tài nguyên từ Internet dường như không hữu ích đối với chúng tôi, nhưng địa chỉ của mạng nội bộ (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) và nơi họ đến, dựa trên nhật ký, có thể được quan tâm.

Sudo

Lệnh sudo cho phép người dùng thực thi một lệnh trong ngữ cảnh root bằng mật khẩu của riêng họ hoặc hoàn toàn không sử dụng mật khẩu đó. Nhiều hoạt động trong Linux yêu cầu quyền root, nhưng việc chạy bằng quyền root được coi là thông lệ rất xấu. Thay vào đó, tốt hơn là áp dụng quyền có chọn lọc để thực thi các lệnh trong ngữ cảnh gốc. Tuy nhiên, nhiều công cụ Linux, bao gồm cả những công cụ tiêu chuẩn như vi, có thể được sử dụng để leo thang đặc quyền theo những cách hợp pháp. Để tìm đúng cách, tôi khuyên bạn nên xem đây.

Điều đầu tiên cần làm sau khi có quyền truy cập vào hệ thống là chạy lệnh sudo -l. Nó sẽ hiển thị quyền sử dụng lệnh sudo. Nếu một người dùng không có mật khẩu được lấy (chẳng hạn như dữ liệu apache hoặc www), thì không thể xảy ra vectơ leo thang đặc quyền sudo. Khi sử dụng sudo, hệ thống sẽ yêu cầu nhập mật khẩu. Sử dụng lệnh passwd để đặt mật khẩu cũng sẽ không hoạt động, nó sẽ hỏi mật khẩu người dùng hiện tại. Nhưng nếu Sudo vẫn có sẵn, thì trên thực tế, bạn cần tìm kiếm:

  • bất kỳ trình thông dịch nào, bất kỳ ai cũng có thể tạo trình bao (PHP, Python, Perl);
  • bất kỳ trình soạn thảo văn bản nào (vim, vi, nano);
  • bất kỳ người xem nào (ít hơn, nhiều hơn);
  • mọi khả năng làm việc với hệ thống tệp (cp, mv);
  • các công cụ có đầu ra ở dạng bash, tương tác hoặc dưới dạng lệnh thực thi (awk, find, nmap, tcpdump, man, vi, vim, ansible).

Suid/Sgid

Có rất nhiều hướng dẫn trên Internet khuyên bạn nên xây dựng tất cả các lệnh suid / sgid, nhưng hiếm có một bài báo nào cung cấp chi tiết cụ thể về những việc cần làm với các chương trình này. Có thể tìm thấy các tùy chọn leo thang đặc quyền không tính đến việc sử dụng khai thác đây. Ngoài ra, một số tệp thực thi có các lỗ hổng cụ thể cho phiên bản HĐH, ví dụ.

Trong một thế giới lý tưởng, bạn nên chạy tất cả các gói đã cài đặt thông qua ít nhất là searchsploit. Trong thực tế, điều này nên được thực hiện với các chương trình phổ biến nhất như sudo. Nó cũng luôn là một tùy chọn để sử dụng và hỗ trợ phát triển các công cụ tự động sẽ làm nổi bật sự thú vị, từ quan điểm leo thang đặc quyền, các tệp thực thi với các bit suid/sgid được đặt. Tôi sẽ đưa ra một danh sách các công cụ như vậy trong phần tương ứng của bài viết.

Các tập lệnh có thể ghi được chạy bởi Cron hoặc Init trong ngữ cảnh Root

Các công việc định kỳ có thể chạy trong ngữ cảnh của những người dùng khác nhau, bao gồm cả root. Nếu có một tác vụ trong cron với một liên kết đến một tệp thực thi và nó có sẵn để bạn viết, bạn có thể dễ dàng thay thế nó bằng một tác vụ độc hại và thực hiện leo thang đặc quyền. Đồng thời, theo mặc định, bất kỳ người dùng nào cũng có thể đọc các tệp có tác vụ cron.

ls -la /etc/cron.d  # show cron jobs 

Tương tự là trường hợp với init. Sự khác biệt là các tác vụ trong cron được thực hiện định kỳ và trong init - khi khởi động hệ thống. Để hoạt động, bạn sẽ cần khởi động lại hệ thống, trong khi một số dịch vụ có thể không hoạt động (nếu chúng chưa được đăng ký trong chế độ tự động tải).

ls -la /etc/init.d/  # show init scripts 

Bạn cũng có thể tìm kiếm các tệp có thể ghi bởi bất kỳ người dùng nào.

find / -perm -2 -type f 2>/dev/null # find world writable files

Phương pháp này khá nổi tiếng, các quản trị viên hệ thống có kinh nghiệm cẩn thận sử dụng lệnh chmod. Tuy nhiên, trên Web, phần lớn các hướng dẫn mô tả việc thiết lập các quyền tối đa. Về nguyên tắc, cách tiếp cận “cứ làm cho nó hoạt động” của các quản trị viên hệ thống thiếu kinh nghiệm tạo ra cơ hội leo thang đặc quyền. Nếu có thể, tốt nhất là tìm trong lịch sử lệnh để biết cách sử dụng chmod không an toàn.

chmod +w /path 
chmod 777 /path

Giành quyền truy cập shell cho người dùng khác

Chúng tôi xem danh sách người dùng trong /etc/passwd. Chúng tôi chú ý đến những người có vỏ. Bạn có thể vũ phu những người dùng này - có thể thông qua người dùng kết quả, cuối cùng bạn sẽ có thể tăng các đặc quyền.

Để cải thiện tính bảo mật, tôi khuyên bạn nên luôn tuân thủ nguyên tắc đặc quyền tối thiểu. Bạn cũng nên dành thời gian để kiểm tra các cấu hình không an toàn có thể tồn tại sau khi khắc phục sự cố - đây là "nhiệm vụ kỹ thuật" của quản trị viên hệ thống.

Mã tự viết

Bạn nên xem xét kỹ các tệp thực thi trong thư mục chính của máy chủ web và người dùng (/var/www/ trừ khi có chỉ định khác). Những tệp này có thể trở thành một giải pháp hoàn toàn không an toàn và chứa những cái nạng đáng kinh ngạc. Tất nhiên, nếu bạn có một số khung trong thư mục máy chủ web của mình, thì việc tìm kiếm zero-day trong đó như một phần của pentest là không hợp lý, nhưng bạn nên tìm và nghiên cứu các sửa đổi, plugin và thành phần tùy chỉnh.

Để tăng tính bảo mật, tốt hơn là tránh sử dụng thông tin xác thực trong tập lệnh tự viết, cũng như chức năng nguy hiểm tiềm ẩn, chẳng hạn như đọc /etc/shadow hoặc thao tác id_rsa, nếu có thể.

Nâng cao đặc quyền thông qua khai thác các lỗ hổng

Trước khi cố gắng nâng cao đặc quyền thông qua khai thác, điều quan trọng là phải hiểu chuyển tập tin đến máy chủ mục tiêu. Ngoài các công cụ thông thường như ssh, ftp, http (wget, curl) thì còn có cả một "vườn thú" của các khả năng.

Để cải thiện tính bảo mật cho hệ thống của bạn, hãy cập nhật thường xuyên lên phiên bản mới nhất ổn định các phiên bản và cũng cố gắng sử dụng các bản phân phối được thiết kế cho Doanh nghiệp. Mặt khác, hiếm khi xảy ra, nhưng có những tình huống khi nâng cấp apt khiến hệ thống không sử dụng được.

Khai thác các dịch vụ đang chạy trong ngữ cảnh của người dùng gốc

Một số dịch vụ Linux chạy với quyền root của người dùng đặc quyền. Chúng có thể được tìm thấy bằng ps aux | gốc grep. Trong trường hợp này, dịch vụ có thể không được công bố trên Web và có sẵn tại địa phương. Nếu nó có các khai thác công khai, chúng có thể được sử dụng một cách an toàn: sự cố dịch vụ trong trường hợp lỗi ít nghiêm trọng hơn nhiều so với sự cố hệ điều hành.

ps -aux | grep root # Linux

Trường hợp thành công nhất có thể được coi là hoạt động của một dịch vụ bị tấn công trong bối cảnh người dùng root. Việc vận hành dịch vụ SMB mang lại quyền truy cập đặc quyền HỆ THỐNG trên các hệ thống Windows (ví dụ: qua ms17-010). Tuy nhiên, điều này không phổ biến trên các hệ thống Linux, vì vậy bạn có thể dành nhiều thời gian cho việc leo thang đặc quyền.

Khai thác lỗ hổng hạt nhân Linux

Đây là con đường cuối cùng để đi. Hoạt động không thành công có thể dẫn đến sự cố hệ thống và trong trường hợp khởi động lại, một số dịch vụ (bao gồm cả những dịch vụ có thể lấy được trình bao ban đầu) có thể không hoạt động. Nó xảy ra rằng quản trị viên chỉ đơn giản là quên sử dụng lệnh kích hoạt systemctl. Thêm vào đó sẽ gây ra nhiều bất mãn cho công việc của bạn nếu việc khai thác chưa được thống nhất.
Nếu bạn quyết định sử dụng các nguồn từ miningdb, hãy nhớ đọc các nhận xét ở phần đầu của tập lệnh. Trong số những thứ khác, nó thường nói cách biên dịch khai thác này một cách chính xác. Nếu bạn quá lười biếng hoặc cần "ngày hôm qua" do thời hạn, bạn có thể tìm kiếm các kho lưu trữ với các lần khai thác đã được biên dịch, ví dụ. Tuy nhiên, cần hiểu rằng trong trường hợp này, bạn sẽ nhận được một con lợn trong một poke. Mặt khác, nếu một lập trình viên hiểu từng byte cách máy tính hoạt động và phần mềm mà nó sử dụng, anh ta sẽ không viết một dòng mã nào trong suốt cuộc đời mình.

cat /proc/version
uname -a
searchsploit "Linux Kernel" 

metasploit

Để nắm bắt và xử lý một kết nối, tốt hơn hết là sử dụng mô-đun khai thác/đa/xử lý. Điều chính là đặt đúng trọng tải, ví dụ: chung/shell/reverce_tcp hoặc chung/shell/bind_tcp. Shell thu được trong Metasploit có thể được nâng cấp lên Meterpreter bằng cách sử dụng mô-đun post/multi/manage/shell_to_meterpreter. Với Meterpreter, bạn có thể tự động hóa quy trình hậu khai thác. Ví dụ: mô-đun post/multi/recon/local_exploit_suggester kiểm tra nền tảng, kiến ​​trúc và các thực thể có thể khai thác, đồng thời đề xuất các mô-đun Metasploit để leo thang đặc quyền trên hệ thống đích. Nhờ có Meterpreter, việc leo thang đặc quyền đôi khi bắt nguồn từ việc chạy đúng mô-đun, nhưng việc hack mà không hiểu chuyện gì đang xảy ra bên trong là không đúng (bạn vẫn phải viết báo cáo).

CÔNG CỤ

Các công cụ tự động hóa việc thu thập thông tin cục bộ sẽ giúp bạn tiết kiệm rất nhiều công sức và thời gian, nhưng bản thân chúng không thể xác định đầy đủ đường leo thang đặc quyền, đặc biệt trong trường hợp khai thác lỗ hổng kernel. Các công cụ tự động hóa sẽ thực hiện tất cả các lệnh cần thiết để bạn thu thập thông tin về hệ thống, nhưng điều quan trọng là có thể phân tích dữ liệu nhận được. Tôi hy vọng bài viết của tôi sẽ hữu ích cho bạn trong việc này. Tất nhiên, có nhiều công cụ hơn tôi sẽ liệt kê bên dưới, nhưng tất cả chúng đều làm cùng một việc - đó là vấn đề về sở thích.

đậu cô ve

Một công cụ khá mới, cam kết đầu tiên là vào tháng 2019 năm XNUMX. Hiện tại nhạc cụ yêu thích của tôi. Điểm mấu chốt là nó làm nổi bật các vectơ leo thang đặc quyền thú vị nhất. Đồng ý, sẽ thuận tiện hơn khi nhận được đánh giá của chuyên gia ở cấp độ này hơn là phân tích dữ liệu thô nguyên khối.

LinEnum

Công cụ yêu thích thứ hai của tôi, nó cũng thu thập và sắp xếp dữ liệu nhận được do liệt kê cục bộ.

linux-khai thác-gợi ý (1,2)

Khai thác này sẽ phân tích hệ thống cho các điều kiện phù hợp để khai thác. Trên thực tế, nó sẽ thực hiện một công việc giống hệt với mô-đun Metasploit local_exploit_suggester, nhưng sẽ cung cấp các liên kết tới các mã nguồn khai thác-db thay vì các mô-đun Metasploit.

Trình kiểm tra quyền riêng tư của Linux

Tập lệnh này sẽ thu thập và sắp xếp theo từng phần một lượng lớn thông tin có thể hữu ích cho việc hình thành một vectơ leo thang đặc quyền.

Lúc khác tôi sẽ giải thích Leo thang đặc quyền Linux thông qua suid/sgid.

Nguồn: www.habr.com

Thêm một lời nhận xét