18.11.2014 Views

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CODING<br />

Александр Эккерт stannic.man@gmail.com<br />

ÏÓËÅÍÅÏÐÎÁÈÂÀÅÌÛÉ<br />

ÑÈØÀÐÏ<br />

Îñíîâíûå ïðàâèëà ñîçäàíèÿ áåçîïàñíîãî êîäà<br />

Ñåãîäíÿ ìû ïîãîâîðèì î òîì, î ÷åì âñïîìèíàþò îáû÷íî â ïîñëåäíþþ<br />

î÷åðåäü — î áåçîïàñíîñòè òâîèõ ïðèëîæåíèé. Âåäü òû æå íå õî÷åøü<br />

÷èòàòü î òîì, ÷òî â òâîðåíèè ðóê òâîèõ — ñóïåðíàâîðî÷åííîé ïðîãðàììå<br />

— íàøëè óÿçâèìîñòè, êîòîðûå ïîñòàâÿò ïîä óãðîçó ðàáîòó êàêèõíèáóäü<br />

âàæíûõ îðãàíèçàöèé? Ëàäíî áû, åñëè ýòî ïðîñòàÿ ôèðìà,<br />

à åñëè áàíê? Èëè àòîìíàÿ ýëåêòðîñòàíöèÿ?<br />

ÂÂÅÄÅÍÈÅ<br />

Увы и ах — технологии .NET прочно вошли в нашу жизнь, и на<br />

сегодняшний день разработчики C# пользуются неслыханной популярностью<br />

на рынке труда. Легкий в изучении и освоении язык дал<br />

программисту неслыханную свободу действий и при этом позволил<br />

расширить круг тех лиц, которые стали гордо именовать себя «программистами».<br />

Столь низкий «порог вхождения в специальность» обусловил<br />

тот факт, что начинающие (и не очень) программисты не стали<br />

уделять должного внимания безопасности своего кода. Но обо всем по<br />

порядку.<br />

У общеязыковой исполняющей среды (common language runtime, CLR)<br />

в .NET Framework есть своя модель безопасного выполнения кода,<br />

независимая от ограничений операционной системы, в которой она<br />

работает. Более того, в отличие от старой модели защиты на основе<br />

участников безопасности (principal-based security), CLR реализует<br />

политику, исходя из того, откуда поступает код, а не из того, кто<br />

являет ся его пользователем. Эта модель защиты по правам доступа<br />

кода (code access security) имеет больший смысл в современных условиях,<br />

поскольку немалая часть кода устанавливается через интернет,<br />

и даже доверенный пользователь (trusted user) не знает, какой код<br />

108<br />

действительно безопасен. Все это реализовано в пространстве имен<br />

System.Security. «Ээээээ, так ты об этом...» — разочарованно вздохнет<br />

читатель, который, наверняка, вдоль и поперек изучил все те фичи,<br />

которые .NET предлагает программисту для реализации его злобных<br />

замыслов. Спешу огорчить — о System.Security мы сегодня как раз<br />

разговаривать не будем. Это скучно :). Вместо этого мы попробуем<br />

взглянуть на проблему «безопасного кода» с другой стороны — с точки<br />

зрения того, в чьи хорошие (или не очень) руки он попадет. Вне зависимости<br />

от того, что предоставляет интерфейс твоей программы: просто<br />

складывает два числа или же управляет атомной электростанцией.<br />

×ÒÎ ÌÎÆÅÒ CLR?<br />

Общеязыковая исполняющая среда (common language runtime, CLR) и<br />

Microsoft .NET Framework предоставляют всем приложениям с управляемым<br />

кодом защиту на основе признаков — это так называемая<br />

evidence-based security. В большинстве случаев при написании кода<br />

обеспечивать защиту явным образом не требуется. Тем не менее, я<br />

попытаюсь кратко рассмотреть вопросы безопасности, которые тебе,<br />

как мегакрутому программисту, возможно, понадобится учитывать при<br />

написании кода, и описать те принципы классификации компонентов,<br />

XÀÊÅÐ 09 /140/ 10

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!