Forwarded from # | Just My Logs
توی این پست میخوایم با یکی از مفاهیم قدیمی ولی مهم در لینوکس آشنا بشیم:
Chroot Jail
کلمهی chroot مخفف عبارت زیر است:
در لینوکس، هر پردازش یک مسیر ریشه (Root Directory) دارد که معمولاً با
این مسیر تعیین میکند یک برنامه از کجا شروع به دیدن فایلها و دایرکتوریهای سیستم کند.
در حالت عادی، یک پردازش میتواند ساختار اصلی سیستم را ببیند:
اما با استفاده از Chroot میتوان Root یک پردازش را تغییر داد.
مثلاً:
بعد از اجرای برنامه داخل این محیط، مسیر
یعنی برنامه فکر میکند در یک سیستم جدا اجرا میشود، در حالی که همچنان روی همان سیستم اصلی قرار دارد.
چرا به آن Jail میگویند؟
Jail یعنی «زندان».
چون یک کاربر یا سرویس داخل یک محدوده مشخص قرار میگیرد و فقط همان محیط را مشاهده میکند.
مثلاً یک کاربر FTP:
بدون Chroot:
با Chroot:
در این حالت کاربر دیگر به مسیرهایی مثل:
سیستم اصلی دسترسی ندارد.
اجرای Chroot
ساختار کلی دستور:
مثلاً:
با این دستور، محیط Bash داخل Jail اجرا میشود و فقط فایلهای موجود در همان محیط را مشاهده میکند.
کاربردهای Chroot Jail
1) محدود کردن سرویسها
یکی از رایجترین استفادههای Chroot، محدود کردن سرویسهایی مثل FTP است تا در صورت وجود مشکل، دسترسی آنها به کل سیستم محدود شود.
2) تعمیر سیستم لینوکس
یکی از کاربردهای حرفهای Chroot، تعمیر سیستمهایی است که دیگر بوت نمیشوند.
با استفاده از Live Linux:
بعد میتوان کارهایی مثل:
را انجام داد.
3) ساخت محیط تست
با Chroot میتوان یک محیط لینوکسی آزمایشی ساخت، بدون اینکه سیستم اصلی تغییر کند.
مثلاً:
نکته امنیتی مهم
Chroot یک Sandbox کامل نیست.
Chroot فقط دید پردازش نسبت به فایلسیستم را تغییر میدهد.
اما:
❌ Kernel جدا ایجاد نمیکند
❌ Processها را کاملاً جدا نمیکند
❌ منابع سیستم را محدود نمیکند
به همین دلیل نباید آن را با Container یا Virtual Machine اشتباه گرفت.
Escape از Chroot
یکی از موضوعات مهم امنیتی، بررسی امکان خروج از محیط Chroot است.
دلیل اصلی این است که Chroot همچنان از همان Kernel سیستم اصلی استفاده میکند:
همچنین مدیریت Deviceها در مسیر:
بسیار مهم است.
چون قرار دادن Deviceهای حساس مثل:
میتواند امنیت محیط را کاهش دهد.
@JustMyLogss
Chroot Jail
کلمهی chroot مخفف عبارت زیر است:
Change Root
در لینوکس، هر پردازش یک مسیر ریشه (Root Directory) دارد که معمولاً با
/ مشخص میشود.این مسیر تعیین میکند یک برنامه از کجا شروع به دیدن فایلها و دایرکتوریهای سیستم کند.
در حالت عادی، یک پردازش میتواند ساختار اصلی سیستم را ببیند:
/
├── bin
├── etc
├── home
├── usr
├── var
└── root
اما با استفاده از Chroot میتوان Root یک پردازش را تغییر داد.
مثلاً:
/var/jail
├── bin
├── etc
├── lib
└── home
بعد از اجرای برنامه داخل این محیط، مسیر
/var/jail برای آن برنامه تبدیل به / میشود.یعنی برنامه فکر میکند در یک سیستم جدا اجرا میشود، در حالی که همچنان روی همان سیستم اصلی قرار دارد.
چرا به آن Jail میگویند؟
Jail یعنی «زندان».
چون یک کاربر یا سرویس داخل یک محدوده مشخص قرار میگیرد و فقط همان محیط را مشاهده میکند.
مثلاً یک کاربر FTP:
بدون Chroot:
FTP User
|
+-- کل فایل سیستم
با Chroot:
FTP User
|
+-- /home/user
|
+-- فایلهای خودش
در این حالت کاربر دیگر به مسیرهایی مثل:
/etc
/usr
/root
سیستم اصلی دسترسی ندارد.
اجرای Chroot
ساختار کلی دستور:
chroot /path/to/new/root command
مثلاً:
sudo chroot /var/jail /bin/bash
با این دستور، محیط Bash داخل Jail اجرا میشود و فقط فایلهای موجود در همان محیط را مشاهده میکند.
کاربردهای Chroot Jail
1) محدود کردن سرویسها
یکی از رایجترین استفادههای Chroot، محدود کردن سرویسهایی مثل FTP است تا در صورت وجود مشکل، دسترسی آنها به کل سیستم محدود شود.
2) تعمیر سیستم لینوکس
یکی از کاربردهای حرفهای Chroot، تعمیر سیستمهایی است که دیگر بوت نمیشوند.
با استفاده از Live Linux:
mount /dev/sda2 /mnt
chroot /mnt
بعد میتوان کارهایی مثل:
update-grub
passwd
apt update
را انجام داد.
3) ساخت محیط تست
با Chroot میتوان یک محیط لینوکسی آزمایشی ساخت، بدون اینکه سیستم اصلی تغییر کند.
مثلاً:
Ubuntu Host
|
+---- Debian Chroot
نکته امنیتی مهم
Chroot یک Sandbox کامل نیست.
Chroot فقط دید پردازش نسبت به فایلسیستم را تغییر میدهد.
اما:
❌ Kernel جدا ایجاد نمیکند
❌ Processها را کاملاً جدا نمیکند
❌ منابع سیستم را محدود نمیکند
به همین دلیل نباید آن را با Container یا Virtual Machine اشتباه گرفت.
Escape از Chroot
یکی از موضوعات مهم امنیتی، بررسی امکان خروج از محیط Chroot است.
دلیل اصلی این است که Chroot همچنان از همان Kernel سیستم اصلی استفاده میکند:
Host Kernel
|
+-- Normal Process
|
+-- Chroot Process
همچنین مدیریت Deviceها در مسیر:
/dev
بسیار مهم است.
چون قرار دادن Deviceهای حساس مثل:
/dev/mem
/dev/sda
میتواند امنیت محیط را کاهش دهد.
@JustMyLogss
❤8👍1🔥1
Forwarded from # | Just My Logs
Deleted Account
توی این پست میخوایم با یکی از مفاهیم قدیمی ولی مهم در لینوکس آشنا بشیم: Chroot Jail کلمهی chroot مخفف عبارت زیر است: Change Root در لینوکس، هر پردازش یک مسیر ریشه (Root Directory) دارد که معمولاً با / مشخص میشود. این مسیر تعیین میکند یک برنامه از کجا شروع…
In Chroot Jail in Linux.pdf
478.8 KB
Eng version
@JustMyLogss
@JustMyLogss
👏9
bluCTF Announcements
🚩 پرچم بالاست، پس مسابقه آغاز میشود مسابقه فتح پرچم بلو bluCTF 🗓️ ۲۵شهریور ۱۴۰۵ 🏆 جایزهها: 🥇 ۱۳۳۳۷ میلیگرم طلا 🥈 ۷۷۷۰ میلیگرم طلا 🥉 ۴۴۴۰ میلیگرم طلا برای ثبتنام وارد شوید: https://ctf.blubank.com
کسب مقام چهارم تو مسابقات امنیت بلو سی تی اف (بلو بانک).
جا داشت بهتر باشیم ولی با مشکلاتی که پیش اومد تونستیم به همینجا برسیم امیدوارم دفعات بعدی رتبه بهتری بیاریم ،تجربه خوبی بود .
جا داشت بهتر باشیم ولی با مشکلاتی که پیش اومد تونستیم به همینجا برسیم امیدوارم دفعات بعدی رتبه بهتری بیاریم ،تجربه خوبی بود .
❤🔥28❤3🔥3😭1
خب سلام اومدیم یه مقدار درباره execve یه توضیح بدیم که احتمالا همتون وقتی یکم با strace کار میکنین این syscall میبینید . کارش بخوام خیلی کوتاه بگم اینه که میاد یه image پروسه فعلی رو با یه برنامه جدید جایگزین میکنه . شاید بگی عین fork هست ولی نه توی این عمل process جدید درست نمیشه بلکه همونه ولی فقط اون برنامه ای که درحال اجرا بود جایگزین میشه و یه برنامه جدید اجرا میشه .
سینتکسش هم به صورت زیره:
pathname خب مربوط به مسیر اون فایل اجرایی هست که میخوایم توی پراسس فعلی اجرا بشه /bin/ls
argv هم مربوط به آرگومان هایی هست که اون فایل اجرایی ما میگیره مثلا ss -t
envp هم مربوط به اون متغیر های Environment هستش.
بخوایم الان با توجه به توضیحایی که بالا دادیم این بخشا رو پر کنیم به صورت زیر در میاد
حالا برای مثال اگه بخوایم ls -la بگیریم متغیر args باید به صورت زیر پر کنیم :
اینم یادتون باشه آخر آرایه هم باید با NULL پر بشه که سیستم بفهمه آرگومان ها کجا به اتمام میرسند .
در واقع اینطوریه :
./main_program:
./program2:
خب توی این بخش میاد آرگومان های داده شده توی برنامه اول رو در برنامه دوم به نمایش میزاره و میشه گفت تمام کاری که میکنه همینه .یه نکته دیگه هم اینه که pid این برنامه اگه 100 بار این وسط برنامه جدید با execve بیاد وسط عوض نمیشه و جدا از اون وقتی یه برنامه جدید با execve اجرا میشه ادامه کدی که توی برنامه اول داریم اجرا نمیشه مگر اینکه به خطا بخوریم توی اجرا کردن برنامه دوم .
و در آخر، کنار execve چندین تابع کتابخانهای هم وجود داره که همگی wrapper هستن و execve رو صدا میزنن execl، execlp، execle، execv و execvp که خب یه سری تفاوت دارن و زیاد توشون دیپ نمیشیم .
➖➖➖➖➖
CHANNEL
سینتکسش هم به صورت زیره:
int execve(
const char *pathname,
char *const argv[],
char *const envp[]
);
pathname خب مربوط به مسیر اون فایل اجرایی هست که میخوایم توی پراسس فعلی اجرا بشه /bin/ls
argv هم مربوط به آرگومان هایی هست که اون فایل اجرایی ما میگیره مثلا ss -t
envp هم مربوط به اون متغیر های Environment هستش.
بخوایم الان با توجه به توضیحایی که بالا دادیم این بخشا رو پر کنیم به صورت زیر در میاد
execve("/bin/ls", args, env);حالا برای مثال اگه بخوایم ls -la بگیریم متغیر args باید به صورت زیر پر کنیم :
char *args[] = {
"ls",
"-l",
"/home",
NULL
};اینم یادتون باشه آخر آرایه هم باید با NULL پر بشه که سیستم بفهمه آرگومان ها کجا به اتمام میرسند .
در واقع اینطوریه :
./main_program:
#include <stdio.h>
#include <unistd.h>
int main()
{
char *args[] = {
"program2",
"hello",
"world",
NULL
};
printf("Before execve\n");
execve("./program2", args, NULL);
printf("After execve\n");
return 0;
}
./program2:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("I am program2\n");
printf("argc = %d\n", argc);
for (int i = 0; i < argc; i++)
{
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0;
}
خب توی این بخش میاد آرگومان های داده شده توی برنامه اول رو در برنامه دوم به نمایش میزاره و میشه گفت تمام کاری که میکنه همینه .یه نکته دیگه هم اینه که pid این برنامه اگه 100 بار این وسط برنامه جدید با execve بیاد وسط عوض نمیشه و جدا از اون وقتی یه برنامه جدید با execve اجرا میشه ادامه کدی که توی برنامه اول داریم اجرا نمیشه مگر اینکه به خطا بخوریم توی اجرا کردن برنامه دوم .
و در آخر، کنار execve چندین تابع کتابخانهای هم وجود داره که همگی wrapper هستن و execve رو صدا میزنن execl، execlp، execle، execv و execvp که خب یه سری تفاوت دارن و زیاد توشون دیپ نمیشیم .
➖➖➖➖➖
CHANNEL
❤10💔1
Forwarded from 𝙊𝙥𝙚𝙧𝙖𝙩𝙤𝙧 𝙇𝙤𝙜𝙨 (radiant moon)
Domain Fronting Technique in C2 Architectures has Been Explained
read below👇👇👇
read below👇👇👇
❤8
Forwarded from IP4M1R (4M1R)
@Time1Netbot
دوستان عزیز این ربات واسه یکی از رفیقامون و تازه شروع کرده و نیاز به حمایت داره
ربات واسه فروش کانفیگ میخام اگر امکانش هست تو کانالاتون به عنوان تبلیغ بزارید، تست رایگان هم داره واسه سرعت و اینکه خودمم استفاده میکنم کانفیگ هاش خوبه
دمتون گرم❤️
دوستان عزیز این ربات واسه یکی از رفیقامون و تازه شروع کرده و نیاز به حمایت داره
ربات واسه فروش کانفیگ میخام اگر امکانش هست تو کانالاتون به عنوان تبلیغ بزارید، تست رایگان هم داره واسه سرعت و اینکه خودمم استفاده میکنم کانفیگ هاش خوبه
دمتون گرم❤️
❤4