Forwarded from SecForge (A)
سلام چطورین؟
یه مقدار اومدیم امروز درباره linux seccomp یا همون secure computing حرف بزنیم که اصلا چی هست.در واقع یه مکانیزمیه برای محدود کردن system call هایی که یه process میتونن کال کنن.
مثلا وقتی کد زیر اجرا میشه:
توی این بخش یه سیسکال صدا زده میشه که
اجرا میشه که آرگومان های مربوط به این سیستکال هستش.
مشکل امنیتی ما چیه؟
فرض میکنیم یه نرم افزاری به اسم pdf parser ورژن mamad.2.0.2 داریم (در دست ابداع) و سیستکال هایی که درواقع این برنامه به اون نیاز داره میشه گفت چیزایی هستن که این زیر مینویسم:
شاید حالا چیزای بیشتری هم باشن ولی به نظر شما اومدن سیستکال mount , reboot , socket توی این برنامه عادیه؟
اینجاست که seccomp توی عمل میاد و میتونیم به کرنل بگیم که چه چیزهایی ALLOW و DENY هستن مثل بخش زیر:
در نتیجه اگه مهاجم داخل process بیاد داداشمون
در واقع seccomp چیزی نیست که توی userspace باشه و در kernel enforce میشه.(بین خودمون باشه LD_PRELOAD میشه دور زد )
یه توضیح ریز درباره LD_PRELOAD بدم و بریم برای ادامه . در واقع این یه sandboxing سمت userspace هستش که dynamic linker میگه قبل اینکه کتابخونه های معمولی بارگزاری کنی این کتابخونه هایی که میگمو بارگزاری کن و در نتیجه توابعی که در اون کتابخانه تعریف شدن override توابع اصلی میشن. dynamic linker چیه؟
در واقع ما دو تا linking داریم . یکی static , dynamic هستن . static میاد تمام کد و توابع داخل یه برنامه تعریف میکنه و آخر یه فایل حجم بالا بهمون میده ولی dynamic اینطور نیست و در واقع اینطوریه که من مثلا یه printf میخوام صدا بزنم پس کد
ترتیب بارگزاریش به شکل زیره:
و درواقع اگه توی
در نتیجه
از بحث اصلی دور شدیم خواستم یکم به قدرت seccomp پی ببریم ;)
ادامه seccomp که گفته بودیم کلا توی kernel enforce میشه . seccomp میتواند از classic BPF برای بررسی syscall استفاده کنه و Kernel اطلاعاتی درباره syscall در اختیار filter قرار میدهد.
اینجا seccomp فقط اسم سیستکال هارو برسی نمیکنه و و اونا رو با syscall number میشناسه.
تا اینجا توضیخ بود و چطوریه و چیکار میکنه . الان میخوایم ببینیم چطور کار میکنه اصلا. یه جدول کوچیک پایین میکشیم یه نگاهی بهش بکنین:
بعد کد زیر اجرا میکنیم :
داخل sandbox ما این بخشا رو داریم:
یه مقدار اومدیم امروز درباره linux seccomp یا همون secure computing حرف بزنیم که اصلا چی هست.در واقع یه مکانیزمیه برای محدود کردن system call هایی که یه process میتونن کال کنن.
مثلا وقتی کد زیر اجرا میشه:
int fo = open("mamad.txt",O_RDONLY);توی این بخش یه سیسکال صدا زده میشه که
openat هستش و کارش حالا باز کردن فایله و شماره سیستکال که داره 257 هستش (توی x86_x64) و بخوایم یه مقدار دیپ تر بشیمopenat(AT_FDCWD, "mamad.txt", O_RDONLY)اجرا میشه که آرگومان های مربوط به این سیستکال هستش.
مشکل امنیتی ما چیه؟
فرض میکنیم یه نرم افزاری به اسم pdf parser ورژن mamad.2.0.2 داریم (در دست ابداع) و سیستکال هایی که درواقع این برنامه به اون نیاز داره میشه گفت چیزایی هستن که این زیر مینویسم:
read
write
openat
close
mmap
munmap
exit
شاید حالا چیزای بیشتری هم باشن ولی به نظر شما اومدن سیستکال mount , reboot , socket توی این برنامه عادیه؟
اینجاست که seccomp توی عمل میاد و میتونیم به کرنل بگیم که چه چیزهایی ALLOW و DENY هستن مثل بخش زیر:
read → ALLOW
write → ALLOW
openat → ALLOW
close → ALLOW
mmap → ALLOW
exit → ALLOW
execve → DENY
ptrace → DENY
mount → DENY
reboot → DENY
در نتیجه اگه مهاجم داخل process بیاد داداشمون
()execve صدا بزنه کرنل اون رو طبق policy که داره محدود میکنه.در واقع seccomp چیزی نیست که توی userspace باشه و در kernel enforce میشه.(بین خودمون باشه LD_PRELOAD میشه دور زد )
یه توضیح ریز درباره LD_PRELOAD بدم و بریم برای ادامه . در واقع این یه sandboxing سمت userspace هستش که dynamic linker میگه قبل اینکه کتابخونه های معمولی بارگزاری کنی این کتابخونه هایی که میگمو بارگزاری کن و در نتیجه توابعی که در اون کتابخانه تعریف شدن override توابع اصلی میشن. dynamic linker چیه؟
در واقع ما دو تا linking داریم . یکی static , dynamic هستن . static میاد تمام کد و توابع داخل یه برنامه تعریف میکنه و آخر یه فایل حجم بالا بهمون میده ولی dynamic اینطور نیست و در واقع اینطوریه که من مثلا یه printf میخوام صدا بزنم پس کد
printf توی یه فایل جداگانه به اسم libc.so.6 قرار داره و همه برنامهها با هم ازش استفاده میکنن خب حالا LD_PRELOAD چیکار میکنه؟ این فایل so. رو قبل از libc صدا میزنهو اینطوریه:$ LD_PRELOAD=/path/to/my.so ./myprogram
ترتیب بارگزاریش به شکل زیره:
1. ld.so اجرا میشه
2. ld.so اول my.so رو بارگذاری میکنه ← اینجا
3. ld.so بعدش libc.so.6 رو بارگذاری میکنه
4. وقتی برنامه دنبال open میگرده:
- اول توی my.so میگرده
- اگه پیدا کرد → از my.so استفاده میکنه
- اگه پیدا نکرد → میره سراغ libc
و درواقع اگه توی
my.so تابعی به اسم open تعریف کنیم جایگزین open اصلی میشه ولی بیاین خیلی شیک با assembly دورش بزنیم:// bypass_preload.c
#include <sys/syscall.h>
#include <unistd.h>
int main() {
long fd = syscall(SYS_openat, AT_FDCWD, "secret.txt", O_RDONLY);
long fd2;
__asm__ volatile (
"mov $257, %%rax\n" // syscall number: openat
"mov $-100, %%rdi\n" // AT_FDCWD
"mov %1, %%rsi\n" // pathname
"mov $0, %%rdx\n" // O_RDONLY
"mov $0, %%r10\n" // mode
"syscall\n"
"mov %%rax, %0\n"
: "=r"(fd2)
: "r"("secret.txt")
: "rax", "rdi", "rsi", "rdx", "r10"
);
return 0;
}
در نتیجه
LD_PRELOAD هیچ کاری نمیتواند بکند چون در این مسیر، تابع open() glibc اصلاً صدا زده نمیشود. مستقیم به kernel میره.از بحث اصلی دور شدیم خواستم یکم به قدرت seccomp پی ببریم ;)
ادامه seccomp که گفته بودیم کلا توی kernel enforce میشه . seccomp میتواند از classic BPF برای بررسی syscall استفاده کنه و Kernel اطلاعاتی درباره syscall در اختیار filter قرار میدهد.
اینجا seccomp فقط اسم سیستکال هارو برسی نمیکنه و و اونا رو با syscall number میشناسه.
تا اینجا توضیخ بود و چطوریه و چیکار میکنه . الان میخوایم ببینیم چطور کار میکنه اصلا. یه جدول کوچیک پایین میکشیم یه نگاهی بهش بکنین:
sandbox.c
│
├── fork()
│
└── Child
│
├── install seccomp
│
└── execve()
│
▼
pdf-parser
بعد کد زیر اجرا میکنیم :
./sandbox ./pdf-parser malicious.pdf
داخل sandbox ما این بخشا رو داریم:
❤5
Forwarded from SecForge (A)
int main(int argc, char **argv)
{
pid_t pid = fork();
if (pid == 0) {
// bache
install_seccomp();
// run PDF parser
execv(argv[1], &argv[1]);
_exit(1);
}
// madar:)
waitpid(pid, NULL, 0);
}
و تابعی که توش libseccomp policy را تعریف میکنیم اینه =>
install_seccomp() که add rule کردنش رو بخش پایین میزارم:seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(read), 0); seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(close), 0); seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(munmap), 0); seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mprotect), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fstat), 0); seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(newfstatat), 0
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(brk), 0); seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(futex), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(clock_gettime), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(exit), 0); seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(exit_group), 0);
یکمی به هم ریختست دیگه ببخشید دیگه
اینم از این بخش و ممنونم از همراهیتون❤️
Join channel⚡️
❤8💔1
با دستور Get-History میتونید تاریخچهٔ دستورات session جاری PowerShell رو ببینید.
ادمینها و کاربرها معمولاً با Clear-History این تاریخچه رو پاک میکنن.
اما از نسخهٔ ۵ به بعد (و بهخصوص در ۷) ماژول PSReadLine برای line-editing و command history استفاده میشه.
Clear-History روی فایل تاریخچهٔ PSReadLine تأثیری نداره و پاکش نمیکنه.
برای دیدن مسیر فایل تاریخچه این دستور رو بزنید:
مسیر رو کپی کنید و فایل رو باز کنید، تو محیط هایی که میخواید privilege escalation انجام بدید یا حتی دسترسی تازه ای گرفتید و قصد دارید دیتا جمع کنید ،امکانش هست دیتای مفیدی توش پیدا کنید تو چک لیستتون بزاریدش .
➖➖➖➖➖
CHANNEL
ادمینها و کاربرها معمولاً با Clear-History این تاریخچه رو پاک میکنن.
اما از نسخهٔ ۵ به بعد (و بهخصوص در ۷) ماژول PSReadLine برای line-editing و command history استفاده میشه.
Clear-History روی فایل تاریخچهٔ PSReadLine تأثیری نداره و پاکش نمیکنه.
برای دیدن مسیر فایل تاریخچه این دستور رو بزنید:
(Get-PSReadLineOption).HistorySavePath
مسیر رو کپی کنید و فایل رو باز کنید، تو محیط هایی که میخواید privilege escalation انجام بدید یا حتی دسترسی تازه ای گرفتید و قصد دارید دیتا جمع کنید ،امکانش هست دیتای مفیدی توش پیدا کنید تو چک لیستتون بزاریدش .
➖➖➖➖➖
CHANNEL
Telegram
NSEs
Where Network meets Red Team 🎯
If you're into PenTesting, Hacking, and Cyber Shenanigans — you're home!
🧠 Learn • 🚀 Hack • 🧩 Quiz • 📚 Books • 😁 Memes
If you're into PenTesting, Hacking, and Cyber Shenanigans — you're home!
🧠 Learn • 🚀 Hack • 🧩 Quiz • 📚 Books • 😁 Memes
🔥9
یکی از ادمین ها زحمت کشیدن و برای اسیب پذیری CVE-2026-110447 که روی Nextcloud app دسترسی RCE میده 1Day نوشتن و تو گیت هاب منتشرش کردن (این اسیب پذیری رو CISA به Known Exploited Vulnerabilities (KEV) Catalog هم اضافه کرده ) ممنون میشم حمایت کنید .
POC
~𝚔𝚕𝚊𝚞𝚜
POC
~𝚔𝚕𝚊𝚞𝚜
Cybersecurity and Infrastructure Security Agency CISA
Known Exploited Vulnerabilities Catalog | CISA
For the benefit of the cybersecurity community and network defenders—and to help every organization better manage vulnerabilities and keep pace with threat activity—CISA maintains the authoritative source of vulnerabilities that have been exploited in the…
❤15🔥2