[Comm] Безопасность UNIX

Денис Смирнов =?iso-8859-1?q?mithraen_=CE=C1_freesource=2Einfo?=
Ср Дек 31 19:07:35 MSK 2003


On Tue, Dec 23, 2003 at 04:11:20PM +0200, Alexandr R. Ogurtzoff wrote:

> Батенька! Пока про таоке только в "левой" операционнке пугать можно... Вирусы  
> под Linux пытаються создавать в лабораторных условиях, но вероятно из за его 
> быстрого развития вряд ли даже они получат распространение или шансы на 
> жизнь...Искрене надеюсь

Кстати зря. С учётом частоты с которой находят новые дырки в софте -- эта
проблема будет и в линуксе. Причём, благодаря его же гибкости, она будет
гораздо масштабнее и серьёзнее чем с виндами.

Слава Линусу, что в 2.6 уже есть LSM, можно хоть как-то минимизировать
ущерб (в отличии от винды при заражении будет нарушаться работоспособность
отдельного сервиса, а не всего сервера, и будет меньше возможностей
использовать взломаный сервер для атак на другие сервисы).

Проблемы с безопасностью будут до тех пор, пока будет использоваться в
критичных приложениях язык, в котором:

1. Нет типов данных "строка" и "последовательность байтов фиксированого
размера", с автоматической проверкой на выход за границы.

2. Нет типов данных с constraint'ами при присваивании и любых операциях
над ними.

3. Проверка результата и кода ошибки _каждой_ вызываемой функции такой
геморрой, что ожидать честную реализацию от программистов глупо (решается,
например, механизмом исключений)

4. (в дополнение к предыдущему) механизм исключений может быть полезен
только в том случае, когда большинство объектов корректно прекращают своё
существовании при потере необходимости в них. Файловые дескрипторы должны
закрываться при исчезновении последней переменной их содержащей, то же и с
многими другими _объектами_ ОС.

5. Освобождение памяти точно так же должно происходить автоматически, это
_необходимо_. Иначе утечки памяти будем всю жизнь ловить (и механизм
исключений, опять же, не сможет быть реализован).

6. Язык, в котором есть тип данных "указатель" -- не пригоден для
написания прикладного ПО. Место ему в системных библиотеках и всяких ядрах
(да и то спорно).

Какие у нас самые распространённые ошибки? buffer owerflow? Двойные
освобождения памяти, или запись в уже освобождённую память? БОльшая часть
ошибок связано с тем, что в C нету типа данных "строка", и следующими
отсюда проблемами.

Так что нас ещё ждёт много радости.

Как программист я сейчас не вижу столь же универсального языка как C++.
Как системный администратор я ненавижу C, C++ и весь софт на них
написаный.

А реальной замены им я сейчас не вижу совсем.

-- 
С уважением, Денис

http://freesource.info




Подробная информация о списке рассылки community