Thiết bị Pentesting di động: Sự ra đời của Anarchy (phần 2)
Phần II: Các vấn đề chuyên môn - Nhân Linux và chroot (đối gốc)
Đây là phần 2 của việc xây dựng thiết bị pentesting di động của riêng mình. Phần này tiếp nối với phần 1.
Bây giờ chúng ta đã biết cách hoạt động của các trình duyệt và flashing cơ bản, hãy tìm hiểu sâu hơn về nội bộ của hệ thống Android và xem mức độ tương tự như hệ điều hành Linux. Cốt lõi chính của hệ thống Android là nhân, và đây cũng là thứ duy nhất trong Android được lấy từ Linux. Nếu bạn so sánh GUI chẳng hạn như front-end (giai đoạn bắt đầu của quá trình xử lý) hoặc thậm chí phần lập trình của hệ thống thì sẽ thấy mọi thứ khác với Linux ở quy mô lớn hơn nhiều. Ví dụ, hệ điều hành android, hoặc về cơ bản mà những gì chúng tôi gọi là Android, chẳng hạn như Framework ứng dụng, được viết hoàn toàn bằng Java trong khi Kernel (nhân) được viết trong C và một phần trong C .
Phân bổ bộ nhớ và không gian nhân
Trước khi chúng ta bắt đầu nói về nhân, hãy nhìn vào phần bộ nhớ trước. Bộ nhớ cơ bản là RAM được chia thành hai phần; cụ thể là user space (không gian người dùng) và kernel space (không gian nhân). Các tiến trình chạy trong không gian người dùng chạy độc lập với không gian nhân nhưng không phải của nhân. Các quy trình không gian người dùng này có quyền truy cập hạn chế vào bộ nhớ. Vai trò của nhân ở đây là quản lý các ứng dụng và đảm bảo chúng không phân bổ nhiều hơn bộ nhớ được yêu cầu và cũng không làm hỏng môi trường khi gọi hoặc tắt các process và các thread (bước điều hành bên trong một process) khác. Không gian người dùng là không gian nơi người dùng bình thường chạy một tiến trình trong khi đó trong không gian nhân, mã chính của nhân được lưu trữ và chỉ có người dùng root hoặc hệ thống có thể gọi các process ở đây. Đây là lý do chính tại sao người dùng có chức năng giới hạn. Các process không gian người dùng chỉ có thể truy cập một phần nhỏ của nhân thông qua giao diện nhân, thườn hay được gọi là - system calls (các cuộc gọi hệ thống). Nếu một process không gian người dùng thực hiện một cuộc gọi hệ thống, một phần mềm ngắt (hướng dẫn đặc biệt với điều kiện đặc biệt) được gửi tới nhân, và chỉ sau khi nhận được trả lời ngắt, nhân sẽ cho phép người dùng thực thi process và chuyển tiếp nó đến trình handler (xử lý).
Hầu hết các kiến trúc android là bộ xử lý armhf và bit x86. Trong kiến trúc bit x86, có 4 vòng bảo vệ. Các vòng này được thực thi dưới một thuộc tính cụ thể của nhân, trong đó Ring 0 được gọi là "Kernel Mode (Chế độ nhân)". Vòng 0 chính giữ đặc quyền cao nhất cho hệ thống. Ring 1 được sử dụng bởi hypervisors (ảo hóa phần cứng), container (vật chứa) và các máy ảo. Ring 2 được sử dụng bởi drivers (các trình điều khiển), và Ring 3 là chế độ đặc quyền ít nhất, nơi các quá trình thông thường tương tác và được thực thi.
Bây giờ, toàn bộ lý do để hiểu về nhân là để biết nơi chúng ta đứng trước khi rooting. Theo mặc định, bất cứ khi nào chúng tôi mua một thiết bị Android mới, tất cả các ứng dụng chúng tôi thực thi chẳng hạn như trình duyệt Chrome, Ứng dụng điện thoại, tin nhắn, trò chơi; tất cả các hoạt động này đều được thực hiện trong vòng 3. Các quy trình của người dùng được chạy trong Vòng 3 thường untrusted (không đáng tin cậy) và do đó bị cấm truy cập vào Không gian nhân. Các tiến trình chạy trong Vòng 0 được giả định là đáng tin cậy, không có lỗi và luôn chạy với mức độ ưu tiên cao.
Nhân
Bây giờ hãy nói về nhân nói chung. Khi nhân Linux đang được chuyển sang Android, những thay đổi được thực hiện cho các nhân là tối giản. Phần được thay đổi ở đây chỉ là user space (không gian người dùng). Và không gian người dùng này là không có gì tương tự như của bất kỳ hệ thống UNIX nào. Đây là lý do chính tại sao tôi đã nói trước đó là khác với nhân, toàn bộ hệ điều hành Android khác với hệ điều hành Linux.
Khi nhân Linux được chuyển sang Android, nhân này được cần để phù hợp với kiến trúc ARM và vì việc sử dụng Android khá khác so với một hệ thống Linux điển hình, một số thứ đã được loại bỏ khỏi nhân để khiến nó phản ứng nhanh hơn. Bây giờ, nếu bạn có thể loại bỏ bớt các tính năng từ một nhân, bạn chắc chắn có thể thêm được một vài tính năng khác. Trở lại chương trình chính của chúng tôi; nếu chúng tôi tạo một thiết bị pentesting, chúng tôi sẽ yêu cầu hỗ trợ cho các trình điều khiển và thư viện bên ngoài.
Nếu không sửa đổi nhân thì sẽ chẳng có nhân nào là khả dụng. Bằng cách sử dụng một hạt nhân tùy chỉnh, chúng tôi có đặc quyền ép xung bộ xử lý, thêm firmware và hỗ trợ trình điều khiển mạng bên ngoài và hơn thế nữa.
Để kiểm tra bản sửa đổi nhân mà hệ thống Android của bạn có, hãy tải xuống trình giả lập thiết bị đầu cuối. Tôi thích sử dụng Jackpal's terminal emulator (trình giả lập thiết bị đầu cuối của Jackpal) vì đó là một phiên bản đã hoàn thiện trơn tru rất giống với phiên bản của một giao diện điều khiển putty. Để kiểm tra phiên bản Android của bạn, gõ: 'uname –a'.
Hình ảnh trên là Android của tôi cho thấy phiên bản nhân là 3.4.112 và là một phiên bản mod của cyanogen mod và Kali Linux. Chúng tôi sẽ xây dựng một nhân tùy chỉnh tương tự phục vụ cho ý định của chúng tôi. Vì vậy, hãy chắc chắn rằng bạn sẽ root và chuẩn bị thiết bị của bạn đúng cách để phục vụ cho ý định của riêng mình.
Chroot Jail (Nhà tù Chroot)
Bây giờ chúng ta đã biết về nhân, bây giờ cùng bàn về việc cài đặt một hệ điều hành Linux chính thức vào Hệ thống Android hiện có của chúng tôi. Chúng tôi chắc chắn hệ điều hành này có thể chạy rất nhiều ứng dụng trên một hệ thống Android, nhưng tất cả các ứng dụng này chạy trong máy ảo Dalvik của riêng chúng tôi (hiện giờ được thay thế bằng ART: Android Runtime; tiếp nối từ Android 4.4). Android Runtime được tối ưu hóa đến mức mọi ứng dụng đang chạy khác đều có thể chạy riêng quá trình của riêng chúng. Máy ảo Dalvik là máy ảo dựa trên thanh ghi, có nghĩa là nó chạy các lớp được biên dịch bởi một trình biên dịch Java, biến đổi chúng thành một định dạng .dex mà tiếp tục được xử lý thành một tập tin odexed và được lưu bên trong một Dalvik Cache. Mặt khác, ART biên dịch toàn bộ ứng dụng thành mã máy làm cho nó nhanh gấp 100 lần so với Dalvik. Tuy nhiên, cả ART và Dalvik đều lưu ứng dụng trong bộ đệm Dalvik để giảm thiểu tải trên RAM. Bây giờ mỗi lần bạn chạy một ứng dụng, cache được gọi từ bộ lưu đệm cache Dalvik và sau đó được tiến hành thực thi. Nếu mã ứng dụng bị sửa đổi, một trong hai (Dalvik hoặc ART) sẽ cần phải cài đặt lại hoặc xóa cache Dalvik để làm cho ứng dụng hoạt động, nếu không nó sẽ tiếp tục chạy trên vòng lặp đóng buộc vô tận.
Tất cả những điều vừa nói trên đây hay còn được gọi là máy chủ ảo Dalvik hoặc ART vẫn còn là quá nhỏ để chứa cả một hệ điều hành. Và đây là nơi chroot đến để cứu nguy. Chroot hoặc thường được gọi là Chroot Jail là một kỹ thuật mà chúng ta tạo ra một cây thư mục và sao chép tất cả các tệp hệ thống cần thiết để chạy một hệ thống bên trong các thư mục cụ thể trong cây. Sau đó, chúng tôi tạo các liên kết tượng trưng cho tất cả các tệp hệ thống bao gồm tệp gốc của thư mục. Vì vậy chroot về cơ bản là viết tắt của 'change root (thay đổi gốc)'. Nhà tù chroot này khá an toàn (trừ khi bạn root), vì bất cứ thứ gì chúng ta chạy trong shell, nó chỉ có thể tham khảo các thư mục bên trong cây, điều đó có nghĩa là nó không thể thực hiện các hoạt động trên toàn hệ thống thực tế vì nó không thể kết nối tới thư viện Android bên ngoài tại đây. Ngay cả quyền truy cập root chỉ nằm trong môi trường chroot'd, có nghĩa là nếu muốn truy cập vào sdcard hoặc bất kỳ thư mục hệ thống cụ thể nào, chúng tôi sẽ cần phải cài nó như một ổ đĩa ngoài trong /mnt/path. Và ngay cả khi đã cài, chúng tôi sẽ không có quyền truy cập để đọc và ghi vào các thư mục đó cho đến khi được chỉ định trong phạm vi cho phép của hệ điều hành Android. Có một cách thích hợp hơn là sử dụng các liên kết tượng trưng, để gắn kết thư mục để mà chúng ta có thể gọi trực tiếp các tệp này qua đường dẫn tuyệt đối thay vì sử dụng đường dẫn tương đối.
Bây giờ, giả sử chúng ta tạo môi trường chroot'd trong Android, chúng ta vẫn cần phải mô phỏng các lệnh được gửi tới hệ thống. Mặc dù android shell mạnh, nó vẫn không thể chạy tất cả các lệnh Linux, và đây là lý do duy nhất tại sao chúng ta cần một thiết bị root. Ứng dụng duy nhất có khả năng làm điều này là Busybox (yêu cầu root). Busybox có khả năng chạy hơn 500 lệnh Linux cùng với sự hỗ trợ cho apt-get và các trình quản lý gói khác.
Mặc dù tất cả những điều này có vẻ khó khăn và hơi khó làm nhưng chúng ta sẽ không phải làm mọi thứ theo cách thủ công. Không phải tất cả các hệ thống đều hỗ trợ sửa đổi nhân. Các chipset với bộ xử lý Snapdragon lại có khả năng đó và còn nhanh hơn trong việc xử lý các hướng dẫn nhúng được sửa đổi so với các chipset MediaTek. Tuy nhiên, trong vài post tiếp theo, tôi sẽ giải thích cách để cài đặt Linux trên cả hai chipset. Một chỉ với môi trường chroot'd (MediaTek), và một với Kernel Mods và hệ thống Linux chính thức (Snapdragon).
Link gốc: http://niiconsulting.com/checkmate/2017/01/the-mobile-pentesting-device-birth-of-anarchy-2/
VCCloud via niiconsulting.com
>> Có thể bạn quan tâm: Thiết bị Pentesting di động: Sự ra đời của Anarchy