TGViewer
Channel Public Channel
NSEs

NSEs

@netsecz

Where Network meets Red Team 🎯
If you're into PenTesting, Hacking, and Cyber Shenanigans — you're home!
🧠 Learn • 🚀 Hack • 🧩 Quiz • 📚 Books • 😁 Memes
Subscribers
1.29K
Photos
131
Videos
15
Links
221
Recent Posts 17 shown
Post #1030 76

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⚡️
  • ❤ 6
  • 💔 1
Post #1029 67

Forwarded from SecForge (A)

سلام چطورین؟
یه مقدار اومدیم امروز درباره 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 ما این بخشا رو داریم:
  • ❤ 4
Post #1027 193

Forwarded from IP4M1R (4M1R)

@Time1Netbot
دوستان عزیز این ربات واسه یکی از رفیقامون و تازه شروع کرده و نیاز به حمایت داره
ربات واسه فروش کانفیگ میخام اگر امکانش هست تو کانالاتون به عنوان تبلیغ بزارید، تست رایگان هم داره واسه سرعت و اینکه خودمم استفاده میکنم کانفیگ هاش خوبه
دمتون گرم❤️
  • ❤ 4
Post #1017 947
خب سلام اومدیم یه مقدار درباره execve یه توضیح بدیم که احتمالا همتون وقتی یکم با strace کار میکنین این syscall میبینید . کارش بخوام خیلی کوتاه بگم اینه که میاد یه image پروسه فعلی رو با یه برنامه جدید جایگزین میکنه . شاید بگی عین fork هست ولی نه توی این عمل process جدید درست نمیشه بلکه همونه ولی فقط اون برنامه ای که درحال اجرا بود جایگزین میشه و یه برنامه جدید اجرا میشه .
سینتکسش هم به صورت زیره:
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
Post #1013 789
bluCTF Announcements 🚩 پرچم بالاست، پس مسابقه آغاز می‌شود مسابقه فتح پرچم بلو bluCTF 🗓️ ۲۵شهریور ۱۴۰۵ 🏆 جایزه‌ها: 🥇 ۱۳۳۳۷ میلی‌گرم طلا 🥈 ۷۷۷۰ میلی‌گرم طلا 🥉 ۴۴۴۰ میلی‌گرم طلا برای ثبت‌نام وارد شوید: https://ctf.blubank.com
کسب مقام چهارم تو مسابقات امنیت بلو سی تی اف (بلو بانک).
جا داشت بهتر باشیم ولی با مشکلاتی که پیش اومد تونستیم به همینجا برسیم امیدوارم دفعات بعدی رتبه بهتری بیاریم ،تجربه خوبی بود .
  • ❤‍🔥 28
  • ❤ 3
  • 🔥 3
  • 😭 1
Post #1011 598

Forwarded from # | Just My Logs

Deleted Account توی این پست می‌خوایم با یکی از مفاهیم قدیمی ولی مهم در لینوکس آشنا بشیم: Chroot Jail کلمه‌ی chroot مخفف عبارت زیر است: Change Root در لینوکس، هر پردازش یک مسیر ریشه (Root Directory) دارد که معمولاً با / مشخص می‌شود. این مسیر تعیین می‌کند یک برنامه از کجا شروع…
In Chroot Jail in Linux.pdf478.8 KB
Eng version
@JustMyLogss
  • 👏 9
Post #1010 576

Forwarded from # | Just My Logs

توی این پست می‌خوایم با یکی از مفاهیم قدیمی ولی مهم در لینوکس آشنا بشیم:
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
Older posts →

About this channel

How can I read @netsecz without a Telegram account?
TGViewer shows the public web preview Telegram publishes for NSEs: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does NSEs have?
NSEs (@netsecz) has 1.29K subscribers on Telegram, refreshed roughly every 30 minutes.
Does NSEs know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →