JIT SPRAY ÃÂÃÂÃÂÛØ× TDSS - Xakep Online
JIT SPRAY ÃÂÃÂÃÂÛØ× TDSS - Xakep Online
JIT SPRAY ÃÂÃÂÃÂÛØ× TDSS - Xakep Online
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