رفتن به محتوا
امنیت سرور و وبمبانی امنیتدرس ۱ از ۱۰

مدل تهدید

قبل از هر ابزار امنیتی بفهم از چه چیزی، در برابر چه کسی محافظت می‌کنی: دارایی، تهدید، آسیب‌پذیری و ریسک، سه هدف محرمانگی و درستی و دسترس‌پذیری، انواع مهاجم (ربات‌ها، فرصت‌طلب، خودی، هدفمند)، سطح حمله، اولویت‌بندی ریسک، قانون و اخلاق کار امنیتی، ساختن آزمایشگاه دوماشینه‌ی این دوره، و فهرست‌برداری از سطح حمله‌ی یک سرور.

  • حدود ۱۹ دقیقه مطالعه
  • ۵ مثال اجراشده
  • ۳ تمرین با جواب
  • متوسط تا پیشرفته
  • به‌روزرسانی: ۲۹ مهر ۱۴۰۵

توی این درس یاد می‌گیری قبل از نصب هر ابزار امنیتی، درست فکر کنی. «امن» به‌تنهایی معنی ندارد؛ سؤال درست این است: چه چیزی را، در برابر چه کسی، تا چه حد باید محافظت کنی؟ با چهار مفهوم پایه (دارایی، تهدید، آسیب‌پذیری، ریسک) و سه هدف امنیت (محرمانگی، درستی، دسترس‌پذیری) آشنا می‌شوی، مهاجم‌های واقعی را می‌شناسی (بیشترشان ربات‌اند، نه هکرهای فیلم‌ها)، سطح حمله‌ی یک سرور را فهرست می‌کنی و ریسک‌ها را اولویت‌بندی می‌کنی. آزمایشگاه دوماشینه‌ی این دوره را هم می‌سازی و قانون اول کار امنیتی را یاد می‌گیری: فقط روی سیستم‌هایی که مال خودت است یا اجازه‌ی کتبی داری.

خیلی‌ها امنیت را با خرید یا نصب ابزار شروع می‌کنند: یک فایروال گران، یک آنتی‌ویروس، یک «اسکنر امنیتی». بعد از شش ماه، سرور با رمز admin123 روی پنل مدیریت هک می‌شود؛ چیزی که هیچ‌کدام از آن ابزارها به آن نگاه نمی‌کرد. مشکل ابزار نبود؛ مشکل این بود که کسی ننشسته بود فکر کند «ارزشمندترین چیز ما چیست و از کجا ممکن است به آن برسند؟».

برای امنیت خانه، اول نمی‌روی دوربین بخری. می‌پرسی: چه چیز ارزشمندی دارم؟ (طلا، مدارک، لپ‌تاپ؛ نه صندلی‌های حیاط.) از چه کسی می‌ترسم؟ (دزد محله، نه یک تیم حرفه‌ای که برای یک الماس خاص آمده؛ و البته آتش و آب هم «تهدید»اند.) از کجا می‌توانند بیایند؟ (در، پنجره‌ی طبقه‌ی همکف، کلیدی که زیر گلدان است.) بعد بر اساس این‌ها خرج می‌کنی: قفل خوب برای در، نرده برای پنجره‌ی پایین، صندوق برای مدارک، و کلید زیر گلدان را برمی‌داری (ارزان‌ترین و مؤثرترین کار!). مدل تهدید همین فکر کردن است، برای سرور.

کلمه معنی مثال در یک فروشگاه آنلاین
دارایی (asset) چیزی که ارزش دارد و باید محافظت شود دیتابیس مشتری‌ها، کلید خصوصی HTTPS، دسترسی root، اعتبار برند
تهدید (threat) کسی یا چیزی که می‌تواند به دارایی آسیب بزند ربات حدس رمز، کارمند ناراضی، خرابی دیسک
آسیب‌پذیری (vulnerability) ضعفی که تهدید از آن استفاده می‌کند رمز ضعیف SSH، نرم‌افزار وصله‌نشده، تزریق SQL
ریسک (risk) احتمال × اثر «ربات رمز ضعیف SSH را حدس بزند و همه‌چیز را بگیرد»: احتمال بالا، اثر خیلی بالا

ریسک فقط وقتی هست که هر سه کنار هم باشند: دارایی ارزشمند، تهدیدی که بخواهد و بتواند، و آسیب‌پذیری‌ای که راه بدهد. کار تو معمولاً کم کردن آسیب‌پذیری‌ها و اثرهاست؛ تهدیدها را نمی‌توانی حذف کنی.

همه‌ی حمله‌ها در نهایت یکی از این سه را می‌زنند (اسمش از حروف اول انگلیسی است و ربطی به سازمان معروف ندارد):

  • محرمانگی (Confidentiality): فقط کسانی که باید، داده را ببینند. نقض: نشت دیتابیس، رمز در لاگ.
  • درستی (Integrity): داده فقط به‌دست کسانی که باید، تغییر کند. نقض: تغییر قیمت‌ها، جا دادن کد مخرب در سایت، دستکاری بکاپ.
  • دسترس‌پذیری (Availability): سرویس وقتی لازم است در دسترس باشد. نقض: حمله‌ی DDoS، باج‌افزار که دیسک را رمزنگاری می‌کند، دیسک پرشده با لاگ.

هر دفاعی را با این سه بسنج: HTTPS محرمانگی و درستی در مسیر را می‌دهد (دوره‌ی مبانی)، بکاپ دسترس‌پذیری و درستی را (دوره‌ی SQL)، و دسترسی کم (GRANT و کاربر جدا) هر سه را.

مهاجم‌ها چه کسانی‌اند؟

Section titled “مهاجم‌ها چه کسانی‌اند؟”
مهاجم انگیزه روش رایج سهم در حمله‌هایی که می‌بینی
ربات‌های خودکار هر سرور ضعیفی، برای استخراج رمزارز، ارسال اسپم یا شبکه‌ی بات اسکن کل اینترنت، حدس رمز، سوءاستفاده از آسیب‌پذیری‌های معروف بیشترین؛ از دقیقه‌های اول روشن شدن سرور
فرصت‌طلب پول یا سرگرمی ابزارهای آماده روی هدف‌های آسان زیاد
خودی (insider) نارضایتی، اشتباه، پول دسترسی‌ای که از قبل دارد کم ولی پرخسارت
هدفمند یک سازمان خاص صبور، ترکیبی، مهندسی اجتماعی کم برای بیشتر کسب‌وکارهای کوچک

نتیجه‌ی عملی: برای بیشتر سرورها، دفاع در برابر ربات‌ها و اشتباه‌های خودمان (یا همکار) ۹۰٪ کار است: وصله، رمز و کلید درست، پورت‌های بسته، بکاپ. این دوره هم با همین‌ها شروع می‌شود.

سطح حمله (attack surface) یعنی همه‌ی درهایی که از آن‌ها می‌شود به سیستم رسید. هر پورت باز، هر کاربر، هر برنامه‌ای که ورودی از بیرون می‌گیرد، هر کلید و رمزی که جایی ذخیره شده. قانون طلایی: سطح حمله را کوچک کن. سرویسی که نیست، هک نمی‌شود.

سطح حمله‌ی یک وب‌سرور، از بیرون به داخل؛ هر لایه یک سری در دارد و هر در باید یا بسته باشد یا آگاهانه باز و محافظت‌شده.

یک روش ساده برای هر کسب‌وکار کوچک، در یک جدول:

  1. دارایی‌ها را فهرست کن (چه چیزی گم شود یا لو برود، به ما ضربه می‌زند؟).
  2. برای هر کدام: چه کسی و از کجا (کدام در سطح حمله) می‌تواند به آن برسد؟
  3. احتمال (کم/متوسط/زیاد) و اثر (کم/متوسط/زیاد) را تخمین بزن.
  4. از بالاترین ریسک شروع کن و برای هر کدام یک اقدام بنویس.
مدل تهدید یک فرایند تکراری است: بعد از هر تغییر بزرگ (سرویس جدید، دسترسی جدید) دوباره بچرخ.

قانون و اخلاق: فقط آزمایشگاه خودت

Section titled “قانون و اخلاق: فقط آزمایشگاه خودت”

مثال ۱: آزمایشگاه دوماشینه

Section titled “مثال ۱: آزمایشگاه دوماشینه”

همان روش دوره‌ی لینوکس (درس‌های فایروال و پروژه‌ی سرور): دو ماشین Multipass روی کامپیوتر خودت. server نقش سرور آسیب‌پذیری را دارد که سخت‌سازی می‌کنیم، و client نقش «بیرون» (اینترنت، مهاجم، یا لپ‌تاپ تو) را. اگر ماشین‌های درس‌های قبل را داری، برای شروع تمیز پاکشان کن:

Terminal window
multipass delete --purge server client
multipass launch 24.04 --name server --cpus 2 --memory 2G --disk 10G
multipass launch 24.04 --name client --cpus 1 --memory 1G --disk 8G
multipass list
نمونه
Name State IPv4 Image
client Running 192.168.64.6 Ubuntu 24.04 LTS
server Running 192.168.64.5 Ubuntu 24.04 LTS

IPها روی سیستم تو فرق می‌کنند؛ در همه‌ی درس‌ها 192.168.64.5 را با IP server خودت عوض کن. روی server چند سرویس نصب کن تا چیزی برای دیدن و سخت‌سازی باشد:

Terminal window
multipass shell server
sudo apt update && sudo apt install -y nginx

(SSH روی Ubuntu سرور از قبل نصب است.) هر وقت در درس‌ها نوشته شد «روی server» یا «روی client»، با multipass shell server یا multipass shell client وارد همان ماشین شو. اگر جایی چیزی خراب شد، multipass delete --purge و دوباره ساختن، دو دقیقه کار است: این آزادی، بزرگ‌ترین مزیت آزمایشگاه است.

مثال ۲: فهرست درهای شبکه

Section titled “مثال ۲: فهرست درهای شبکه”

روی server، اولین سؤال: چه چیزهایی از شبکه در دسترس‌اند؟

Terminal window
sudo ss -tulpn
نمونه
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.54:53 0.0.0.0:* users:(("systemd-resolve",pid=548,fd=16))
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=548,fd=14))
udp UNCONN 0 0 192.168.64.5%enp0s1:68 0.0.0.0:* users:(("systemd-network",pid=512,fd=22))
tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=548,fd=15))
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1712,fd=5),("nginx",pid=1711,fd=5))
tcp LISTEN 0 4096 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1023,fd=3),("systemd",pid=1,fd=72))
tcp LISTEN 0 4096 127.0.0.54:53 0.0.0.0:* users:(("systemd-resolve",pid=548,fd=17))
tcp LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=1712,fd=6),("nginx",pid=1711,fd=6))
tcp LISTEN 0 4096 [::]:22 [::]:* users:(("sshd",pid=1023,fd=3),("systemd",pid=1,fd=73))

-t و -u یعنی TCP و UDP، -l در حال گوش دادن، -p برنامه، -n عدد (دوره‌ی لینوکس، درس پورت و سوکت). ستون Local Address را بخوان: هر چه روی 127.0.0.x است فقط از داخل ماشین در دسترس است (DNS داخلی). درهای واقعی به بیرون، آن‌هایی‌اند که روی 0.0.0.0 یا [::] هستند: SSH روی ۲۲ و nginx روی ۸۰. (پورت ۶۸ UDP مال DHCP است و جواب دریافت IP را می‌گیرد.) این دو سطر، سطح حمله‌ی شبکه‌ای این سرور است.

مثال ۳: چه کسانی می‌توانند وارد شوند؟

Section titled “مثال ۳: چه کسانی می‌توانند وارد شوند؟”
Terminal window
awk -F: '$7 !~ /(nologin|false|sync)$/ {print $1, "uid=" $3, $7}' /etc/passwd
getent group sudo
نمونه
root uid=0 /bin/bash
ubuntu uid=1000 /bin/bash
sudo:x:27:ubuntu

awk (دوره‌ی لینوکس) کاربرهایی را نشان می‌دهد که پوسته‌ی ورود دارند؛ بقیه کاربرهای سیستمی‌اند که نمی‌توانند وارد شوند. این‌جا دو کاربر: root و ubuntu، و ubuntu در گروه sudo است، یعنی در عمل او هم root است. هر کاربر با پوسته یک در است و هر عضو sudo یک کلید همه‌جا.

مثال ۴: فایل‌هایی با قدرت ویژه

Section titled “مثال ۴: فایل‌هایی با قدرت ویژه”

برنامه‌های SUID با دسترسی صاحبشان (معمولاً root) اجرا می‌شوند، هر کس که اجرایشان کند (دوره‌ی لینوکس، درس مجوزهای ویژه). هر کدام اگر باگ داشته باشد، پله‌ای است برای رسیدن به root:

Terminal window
find / -xdev -perm -4000 -type f 2>/dev/null
نمونه
/usr/bin/chfn
/usr/bin/su
/usr/bin/sudo
/usr/bin/passwd
/usr/bin/umount
/usr/bin/gpasswd
/usr/bin/chsh
/usr/bin/fusermount3
/usr/bin/mount
/usr/bin/newgrp
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/polkit-1/polkit-agent-helper-1

این فهرست برای یک Ubuntu تازه عادی است. ارزش این دستور در مقایسه است: خروجی امروز را در یک فایل نگه دار؛ اگر روزی فایل SUID جدیدی (مثلاً /tmp/.x یا /home/ubuntu/bash) ظاهر شد، علامت جدی نفوذ است (درس واکنش به حادثه).

مثال ۵: یک مدل تهدید واقعی، در یک جدول

Section titled “مثال ۵: یک مدل تهدید واقعی، در یک جدول”

برای فروشگاه آزمایشی این دوره (nginx روی server، یک برنامه‌ی وب، یک دیتابیس، SSH برای مدیریت):

دارایی تهدید و در احتمال اثر اقدام (درس)
دسترسی root سرور ربات‌ها، حدس رمز روی SSH ۲۲ زیاد خیلی زیاد فقط کلید، بستن root، fail2ban (سخت‌سازی SSH، حدس رمز)
دیتابیس مشتری‌ها تزریق SQL از فرم جست‌وجو متوسط خیلی زیاد کوئری پارامتری، کاربر دیتابیس با دسترسی کم (حمله‌های وب؛ دوره‌ی SQL)
حساب کاربرها XSS و دزدیدن جلسه متوسط زیاد خروجی escape‌شده، کوکی HttpOnly، CSP (حمله‌های وب، سخت‌سازی Nginx)
کل سرور آسیب‌پذیری معروف در بسته‌ی وصله‌نشده زیاد زیاد به‌روزرسانی خودکار (به‌روزرسانی و secret)
رمز دیتابیس و کلیدهای API لو رفتن در گیت متوسط زیاد secret بیرون از کد، اسکن تاریخچه (به‌روزرسانی و secret)
دسترس‌پذیری سایت پر شدن دیسک، سرویس خوابیده متوسط متوسط پایش و هشدار (لاگ و پایش)
همه‌ی داده‌ها باج‌افزار، اشتباه انسانی کم تا متوسط خیلی زیاد بکاپ بیرون از سرور، آزمایش بازیابی (دوره‌ی SQL، واکنش به حادثه)

این جدول نقشه‌ی همین دوره است: هر درس جلوی یک یا چند ردیف را می‌گیرد، و در پروژه‌ی پایانی همه را روی server پیاده می‌کنی.

⚡ بررسی سریع

کدام کار برای یک VPS تازه‌ی یک فروشگاه کوچک بیشترین کاهش ریسک را با کمترین هزینه دارد؟

پشت پرده: دفاع در عمق و کمترین دسترسی

Section titled “پشت پرده: دفاع در عمق و کمترین دسترسی”

دو اصل که در همه‌ی درس‌های بعد تکرار می‌شوند:

  • دفاع در عمق (defense in depth): هیچ لایه‌ای کامل نیست، پس چند لایه بگذار تا شکستن یکی کافی نباشد. فایروال پورت دیتابیس را می‌بندد، و دیتابیس فقط روی 127.0.0.1 گوش می‌دهد، و کاربر برنامه فقط به جدول‌های لازم دسترسی دارد، و کوئری‌ها پارامتری‌اند. اگر برنامه هک شود، مهاجم هنوز نمی‌تواند جدول‌ها را پاک کند (دوره‌ی SQL).
  • کمترین دسترسی (least privilege): هر کاربر، برنامه و کلید فقط همان دسترسی‌ای را داشته باشد که برای کارش لازم است، و فقط تا وقتی لازم است. nginx با کاربر www-data اجرا می‌شود نه root؛ اسکریپت بکاپ فقط خواندن دیتابیس را دارد؛ کلید SSH همکاری که رفته، همان روز حذف می‌شود.

یک اصل سوم هم هست که به آن کمتر فکر می‌شود: فرض کن نفوذ رخ می‌دهد. یعنی علاوه بر جلوگیری، تشخیص (لاگ و پایش) و بازیابی (بکاپ، برنامه‌ی واکنش) را هم بساز. سازمانی که فقط روی دیوار سرمایه‌گذاری کرده، وقتی دیوار شکست، نه می‌فهمد و نه می‌داند چه کند.

دستور (روی server) سؤالی که جواب می‌دهد
sudo ss -tulpn کدام پورت‌ها و برنامه‌ها باز‌اند؟
awk -F: '$7 !~ /nologin|false/' /etc/passwd کدام کاربرها می‌توانند وارد شوند؟
getent group sudo چه کسانی root هستند؟
find / -xdev -perm -4000 -type f کدام برنامه‌ها SUIDاند؟
systemctl list-units --type=service --state=running چه سرویس‌هایی اجرا می‌شوند؟
ls -la ~/.ssh/ /root/.ssh/ چه کلیدهایی اجازه‌ی ورود دارند؟
اصطلاح معنی
asset / threat / vulnerability / risk دارایی / تهدید / آسیب‌پذیری / ریسک
CIA محرمانگی، درستی، دسترس‌پذیری
attack surface همه‌ی درهای ورود به سیستم
defense in depth چند لایه‌ی مستقل
least privilege کمترین دسترسی لازم

ابزار بدون مدل تهدید، روی چیزهای اشتباه تمرکز می‌کند. راه‌حل: اول جدول مثال ۵ را برای سیستم خودت پر کن.

۲) «کسی با ما کاری ندارد»

Section titled “۲) «کسی با ما کاری ندارد»”

ربات‌ها نمی‌دانند تو کی هستی و برایشان مهم نیست؛ هر IP را امتحان می‌کنند. راه‌حل: فرض کن سرور از دقیقه‌ی اول زیر حمله است (چون هست؛ درس لاگ و پایش).

۳) فراموش کردن دسترس‌پذیری

Section titled “۳) فراموش کردن دسترس‌پذیری”

همه به نشت داده فکر می‌کنند، کمتر کسی به دیسکی که با لاگ پر می‌شود یا بکاپی که برنمی‌گردد. راه‌حل: هر سه هدف CIA را در جدول ریسک بیاور.

۴) سرویس‌های فراموش‌شده

Section titled “۴) سرویس‌های فراموش‌شده”

یک پنل آزمایشی که سال پیش روی پورت ۸۰۸۰ بالا آمد و هیچ‌وقت خاموش نشد. راه‌حل: ss -tulpn منظم، و هر چیزی که نمی‌شناسی را بررسی کن.

۵) آزمایش روی سیستم دیگران

Section titled “۵) آزمایش روی سیستم دیگران”

حتی با نیت خوب. راه‌حل: فقط آزمایشگاه خودت؛ برای سیستم شرکت، اجازه‌ی کتبی با محدوده‌ی مشخص.

تمرینآسان

برای یک وبلاگ شخصی روی یک VPS (وردپرس، بدون فروش و بدون اطلاعات مشتری) سه دارایی، سه تهدید و برای هر کدام یک اقدام بنویس. کدام هدف CIA برای این وبلاگ از همه مهم‌تر است؟

دیدن جواب
دارایی تهدید اقدام
دسترسی مدیر وردپرس حدس رمز روی صفحه‌ی ورود رمز قوی و یکتا، تأیید دومرحله‌ای، محدود کردن تلاش‌های ورود
خود سرور افزونه‌ی وصله‌نشده به‌روزرسانی خودکار، حذف افزونه‌های بی‌استفاده
نوشته‌های چندساله خرابی دیسک یا هک و پاک شدن بکاپ خودکار بیرون از سرور

مهم‌ترین هدف این‌جا درستی و دسترس‌پذیری است: داده‌ی محرمانه‌ی زیادی نیست (نوشته‌ها عمومی‌اند)، ولی کسی نباید بتواند محتوای وبلاگ را عوض کند یا در آن کد مخرب بگذارد، و سال‌ها نوشته نباید از بین برود. برای همین بکاپ و جلوگیری از دسترسی مدیر، بالاترین اولویت‌اند.

تمرینمتوسط

روی server یک اسکریپت surface.sh بنویس که در یک صفحه سطح حمله را خلاصه کند: پورت‌هایی که روی همه‌ی آدرس‌ها گوش می‌دهند، کاربرهای دارای پوسته، اعضای گروه sudo و تعداد فایل‌های SUID. خروجی را در ~/surface-$(date +%F).txt ذخیره کن تا بعداً مقایسه کنی.

دیدن جواب
surface.sh
#!/usr/bin/env bash
echo "== surface report: $(hostname) $(date '+%F %T')"
echo "-- listening on all addresses:"
sudo ss -tulpnH | awk '$5 ~ /^(0\.0\.0\.0|\[::\]|\*):/ {print " " $1, $5, $7}'
echo "-- users with a login shell:"
awk -F: '$7 !~ /(nologin|false|sync)$/ {print " " $1}' /etc/passwd
echo "-- sudo group: $(getent group sudo | cut -d: -f4)"
echo "-- SUID files: $(sudo find / -xdev -perm -4000 -type f 2>/dev/null | wc -l)"
Terminal window
chmod +x surface.sh
./surface.sh | tee ~/surface-$(date +%F).txt
نمونه
== surface report: server 2026-10-22 10:12:40
-- listening on all addresses:
tcp 0.0.0.0:80 users:(("nginx",pid=1712,fd=5),("nginx",pid=1711,fd=5))
tcp 0.0.0.0:22 users:(("sshd",pid=1023,fd=3),("systemd",pid=1,fd=72))
tcp [::]:80 users:(("nginx",pid=1712,fd=6),("nginx",pid=1711,fd=6))
tcp [::]:22 users:(("sshd",pid=1023,fd=3),("systemd",pid=1,fd=73))
-- users with a login shell:
root
ubuntu
-- sudo group: ubuntu
-- SUID files: 13

-H در ss سرتیتر را حذف می‌کند تا awk فقط داده ببیند؛ ستون پنجم آدرس محلی است. tee هم روی صفحه چاپ می‌کند و هم در فایل می‌نویسد. با diff surface-قدیم.txt surface-جدید.txt (دوره‌ی لینوکس) هر تغییری در سطح حمله را می‌بینی.

تمرینسخت

برای فروشگاه آزمایشی، جدول مثال ۵ را با یک ستون «امتیاز ریسک» گسترش بده (کم=۱، متوسط=۲، زیاد=۳، خیلی زیاد=۴؛ امتیاز = احتمال × اثر) و ردیف‌ها را از بالاترین امتیاز مرتب کن. با یک برنامه‌ی کوچک پایتون این کار را انجام بده تا فردا با اضافه کردن ریسک جدید، فقط یک خط عوض کنی.

دیدن جواب
risks.py
LEVEL = {"کم": 1, "متوسط": 2, "زیاد": 3, "خیلی زیاد": 4}
risks = [
("حدس رمز SSH", "زیاد", "خیلی زیاد"),
("تزریق SQL", "متوسط", "خیلی زیاد"),
("XSS و دزدیدن جلسه", "متوسط", "زیاد"),
("بسته‌ی وصله‌نشده", "زیاد", "زیاد"),
("secret در گیت", "متوسط", "زیاد"),
("پر شدن دیسک", "متوسط", "متوسط"),
("باج‌افزار", "کم", "خیلی زیاد"),
]
scored = sorted(risks, key=lambda r: LEVEL[r[1]] * LEVEL[r[2]], reverse=True)
for name, likelihood, impact in scored:
print(f"{LEVEL[likelihood] * LEVEL[impact]:>2} {name} ({likelihood} × {impact})")
Terminal window
python3 risks.py
خروجی
12 حدس رمز SSH (زیاد × خیلی زیاد)
9 بسته‌ی وصله‌نشده (زیاد × زیاد)
8 تزریق SQL (متوسط × خیلی زیاد)
6 XSS و دزدیدن جلسه (متوسط × زیاد)
6 secret در گیت (متوسط × زیاد)
4 پر شدن دیسک (متوسط × متوسط)
4 باج‌افزار (کم × خیلی زیاد)

ترتیب کار روشن شد: اول SSH، بعد وصله‌ها، بعد تزریق SQL. باج‌افزار امتیاز کمی گرفت چون احتمالش پایین است؛ ولی اثرش «خیلی زیاد» است و این نوع ریسک‌ها (کم‌احتمال، فاجعه‌بار) را با کم کردن اثر مدیریت می‌کنی، نه احتمال: بکاپ بیرون از سرور که برمی‌گردد. یک عدد هرگز جای فکر را نمی‌گیرد. (sorted با key و lambda در دوره‌ی پایتون، درس توابع.)

آزمونک
  1. ریسک چه وقت وجود دارد؟

  2. باج‌افزاری که دیسک را رمزنگاری می‌کند، بیش از همه کدام هدف را می‌زند؟

  3. بیشتر حمله‌هایی که یک VPS معمولی می‌بیند از کجاست؟

  4. سطح حمله یعنی…

  5. در ss -tulpn، سرویسی روی 127.0.0.1:5432 گوش می‌دهد. در سطح حمله‌ی شبکه‌ای از بیرون است؟

  6. اسکن پورت سرور یک سایت دیگر «فقط برای یاد گرفتن» چطور است؟

  • امنیت با سؤال شروع می‌شود، نه ابزار: چه چیزی، در برابر چه کسی، از کدام در.
  • دارایی، تهدید، آسیب‌پذیری؛ ریسک = احتمال × اثر؛ اولویت با بیشترین ریسک.
  • سه هدف CIA: محرمانگی، درستی، دسترس‌پذیری.
  • بیشتر مهاجم‌ها ربات‌اند؛ وصله، کلید درست، پورت بسته و بکاپ بیشتر کار است.
  • سطح حمله را کوچک کن: ss -tulpn، کاربرها، sudo، SUID؛ و تغییراتش را مقایسه کن.
  • دفاع در عمق، کمترین دسترسی، و فرض نفوذ (تشخیص و بازیابی).
  • همه‌ی آزمایش‌ها فقط روی آزمایشگاه خودت: server و client.
برگه‌ی تقلب این درس
دستورکاری که می‌کند
multipass launch 24.04 --name serverساختن ماشین آزمایشی
sudo ss -tulpnدرهای شبکه
awk -F: '$7 !~ /nologin|false/' /etc/passwdکاربرهای دارای پوسته
getent group sudoچه کسانی root هستند
find / -xdev -perm -4000 -type fفایل‌های SUID
ریسک = احتمال × اثراولویت‌بندی
CIAمحرمانگی، درستی، دسترس‌پذیری
فقط آزمایشگاه خودتقانون اول