Analýza programu - Program analysis
| Vývoj softwaru |
|---|
V počítačové vědě je programová analýza proces automatické analýzy chování počítačových programů s ohledem na vlastnost, jako je správnost, robustnost, bezpečnost a živost. Programová analýza se zaměřuje na dvě hlavní oblasti: optimalizaci programu a správnost programu . První se zaměřuje na zlepšení výkonu programu a zároveň snižuje využití zdrojů, zatímco druhý se zaměřuje na zajištění toho, aby program dělal to, co má.
Analýzu programu lze provádět bez spuštění programu ( statická analýza programu ), za běhu ( dynamická analýza programu ) nebo v kombinaci obou.
Statická analýza programu
V kontextu správnosti programu může statická analýza odhalit zranitelná místa ve fázi vývoje programu. Tyto chyby zabezpečení lze snadněji opravit než ty, které byly nalezeny během testovací fáze, protože statická analýza vede k jádru chyby zabezpečení.
Vzhledem k tomu, že mnoho forem statické analýzy je výpočetně nerozhodnutelné, mechanismy jejich provedení nebudou vždy ukončeny správnou odpovědí - buď proto, že někdy vrátí falešnou zápornou hodnotu („nebyly nalezeny žádné problémy“, když kód ve skutečnosti má problémy) nebo falešně pozitivní, nebo proto, že nikdy nevrátí špatnou odpověď, ale někdy nikdy neukončí. Navzdory svým omezením může první typ mechanismu snížit počet zranitelností, zatímco druhý může někdy poskytnout silnou jistotu neexistence určité třídy zranitelností.
Nesprávné optimalizace jsou vysoce nežádoucí. V kontextu optimalizace programu tedy existují dvě hlavní strategie, jak zvládnout výpočetně nerozhodnutelnou analýzu:
- Optimalizátor, u kterého se očekává dokončení v relativně krátkém čase, jako například optimalizátor v optimalizačním kompilátoru, může použít zkrácenou verzi analýzy, u níž je zaručeno dokončení v určitém čase a zaručeně najde pouze správné optimalizace.
- Optimalizační nástroj jiného výrobce může být implementován takovým způsobem, aby nikdy neprodukoval nesprávnou optimalizaci, ale také tak, aby v některých situacích mohl pokračovat v běhu neomezeně dlouho, dokud jej nenajde (což se nikdy nesmí stát). V takovém případě by vývojář používající nástroj musel nástroj zastavit a vyhnout se opětovnému spuštění nástroje na tomto kousku kódu (nebo případně upravit kód, aby nedošlo k vypnutí nástroje).
Nicméně, tam je také o třetinu strategie, která je někdy platí pro jazyky, které nejsou zcela specifikovaných, jako je například C . Optimalizační kompilátor může svobodně generovat kód, který za běhu dělá cokoli - dokonce i pády - pokud narazí na zdrojový kód, jehož sémantika není používaným jazykovým standardem specifikována.
Řízení toku
Účelem analýzy toku toku je získat informace o tom, které funkce lze volat v různých bodech během provádění programu. Shromážděné informace jsou reprezentovány grafem toku řízení (CFG), kde uzly jsou pokyny programu a okraje představují tok řízení. Identifikací kódových bloků a smyček se CFG stává výchozím bodem pro optimalizace provedené kompilátorem.
Analýza toku dat
Analýza toku dat je technika určená ke shromažďování informací o hodnotách v každém bodě programu a o tom, jak se v průběhu času mění. Tuto techniku kompilátory často používají k optimalizaci kódu. Jedním z nejznámějších příkladů analýzy toku dat je kontrola znečištění, která spočívá v zvážení všech proměnných, které obsahují data dodaná uživatelem-což je považováno za „zkažené“, tj. Nejisté-a v zabránění jejich použití, dokud nebudou dezinfikovány. Tato technika se často používá k prevenci útoků s injekcí SQL . Kontrolu znečištění lze provádět staticky nebo dynamicky.
Abstraktní interpretace
Abstraktní interpretace umožňuje extrahovat informace o možném spuštění programu, aniž by byl program skutečně spuštěn. Tyto informace mohou kompilátoři použít k hledání možných optimalizací nebo k certifikaci programu proti určitým třídám chyb.
Typové systémy
Systémy typů spojují typy s programy, které splňují určité požadavky. Jejich účelem je vybrat podmnožinu programů jazyka, které jsou podle vlastnosti považovány za správné.
- Kontrola typu - ověřte, zda je program typovým systémem přijat.
Kontrola typu se v programování používá k omezení toho, jak se používá programovací objekt a co mohou dělat. To provádí překladač nebo překladač. Kontrola typu může také pomoci předcházet zranitelnostem tím, že zajistí, že podepsaná hodnota nebude přiřazena nepodepsané proměnné. Kontrolu typu lze provádět staticky (v době kompilace), dynamicky (za běhu) nebo kombinací obou.
Informace o statickém typu ( odvozené nebo explicitně poskytnuté anotacemi typu ve zdrojovém kódu) lze také použít k optimalizaci, jako je například nahrazení polí v krabici rozbalenými poli.
Efektové systémy
Efektové systémy jsou formální systémy navržené tak, aby reprezentovaly efekty, které funkce nebo metoda může mít. Efekt kodifikuje, co se děje a co se dělá - obvykle se to označuje jako druh efektu a region.
Kontrola modelu
Kontrola modelu se týká přísných, formálních a automatizovaných způsobů, jak zkontrolovat, zda model (což v tomto kontextu znamená formální model části kódu, ačkoli v jiných kontextech to může být model kusu hardwaru) vyhovuje danému Specifikace. Vzhledem k inherentní povaze konečného stavu kódu a jak specifikaci, tak kód lze převést na logické vzorce, je možné pomocí efektivních algoritmických metod zkontrolovat, zda systém tuto specifikaci porušuje.
Dynamická analýza programu
Dynamická analýza může využívat znalosti programu o běhu ke zvýšení přesnosti analýzy a zároveň poskytuje ochranu za běhu, ale dokáže analyzovat pouze jedno provedení problému a může kvůli běhovým kontrolám snížit výkon programu.
Testování
Software by měl být testován, aby byla zajištěna jeho kvalita a spolehlivý výkon, jak se předpokládá, a aby nevytvářel konflikty s jiným softwarem, který může fungovat vedle něj. Testy se provádějí spuštěním programu se vstupem a vyhodnocením jeho chování a vytvořeného výstupu. I když nejsou stanoveny žádné požadavky na zabezpečení, mělo by být provedeno další testování zabezpečení, aby se zajistilo, že útočník nemůže manipulovat se softwarem a ukrást informace, narušit běžné operace softwaru nebo jej použít jako pivot k útoku na jeho uživatele.
Monitorování
Program monitoruje záznamy a protokoly různých druhů informací o programu, jako je využití zdrojů, události a interakce, aby bylo možné je zkontrolovat a najít nebo určit příčiny abnormálního chování. Kromě toho jej lze použít k provádění auditů zabezpečení. Automatizované sledování programů je někdy označováno jako ověřování za běhu .
Krájení programu
Pro danou podmnožinu chování programu sestává krájení programu z redukce programu na minimální formu, která stále vytváří vybrané chování. Redukovaný program se nazývá „plátek“ a je věrnou reprezentací původního programu v doméně zadané podmnožiny chování. Obecně je nalezení řezu neřešitelný problém, ale zadáním podmnožiny cílového chování hodnotami sady proměnných je možné získat přibližné řezy pomocí algoritmu toku dat. Tyto řezy vývojáři obvykle používají během ladění k vyhledání zdroje chyb.
Viz také
- Automatická kontrola kódu
- Jazykové zabezpečení
- Polyvariance
- Profilování (počítačové programování)
- Ověření programu
- Analýza ukončení
Reference
Další čtení
- Agrawal, Hiralal; Horgan, Joseph R. Dynamické krájení programu (PDF) .
- Chunlei, Wang; Gang, Zhao; Yiqi, Dai (2009). „Efektivní přístup k analýze zabezpečení toku toků pro binární spustitelné soubory“. 2009 2. mezinárodní konference IEEE o počítačových vědách a informačních technologiích . s. 272–276. doi : 10.1109/ICCSIT.2009.5234950 . ISBN 978-1-4244-4519-6.
- Nielson, Flemming; Nielson, Hanne Riis; Hankin, Chris (2005). Zásady programové analýzy . Springer Science+Business Media .
externí odkazy
-
Média související s programovou analýzou na Wikimedia Commons