The Attack of the Script Kiddie                  http://security.tsu.ru/info/unix/lance/enemy2.html
Know  Your Enemy:II
Lance Spitzner, June 18,1999
_________________________________________________________________________________

Знай своего врага: II
 

Эта статья – вторая  из серии «Знай своего врага».
В первой были обсуждены методология, лежащая в основе одной из наиболее общих и универсальных угроз – Script Kiddie и средства, Script Kiddie применяемые.
Третья статья обсуждает, что случится, если они получат права рута. В особенности, как они будут маскировать свои действия  и что они будут делать дальше.
Данная статья фокусируется на том, как обнаружить эти попытки. Как и на войне, Вам необходимо следить за противником и знать, что он делает. Здесь мы обсудим то, что Вы можете определить с помощью системных логов (предпринималась ли попытка взлома по отношению к Вашей системе, для чего она предпринималась, какие средства применялись и была ли попытка успешной), а что - нет. Приведенные ниже примеры имеют отношение к Linux'у, но они применимы к любому виду UNIX'a. Имейте в виду, что не существует определенного способа отслеживания врага,  который бы гарантировал  Вам знание каждого его шага, но в качестве стартовой площадки эта статья  Вам подойдет.

Охраняйте Ваши логи.

Эта сатья не о том, как определить вторжение в Вашу систему, есть немало информации на эту тему. Если она Вас интересует, я рекомендую Вам следующие приложения:   Network Flight Recorder или swatch. Эта статья фокусируется на сборе информации. В особенности, как составить полное представление о том, что враг может сделать, просмотрев Ваши системные логи.  Но прежде чем обсуждать это, мы должны сначала обсудить, как оберегать Ваши логи. Они ничего не стоят, если вы не можете поручиться за их целостность. Ведь первое, что делает большинство взломщиков - подменяет лог-файлы на взломанной системе. Существует множество средств, позволяющих замести за собой следы, оставленные в логах (например, cloak) либо подменить демон, ведущий логи, на троян (например, troianed syslogd binaries). Итак, первый шаг в отслеживании Ваших логов заключается в их охране.
Это означает, что Вам необходим удаленный лог-сервер. Вне зависимости от того, как защищена Ваша система, Вы не можете поручиться за логи на взломанной системе. Взломщик может просто набрать  rm -rf /*  в Вашей системе, удалив все таким образом  с Вашего hard-диска. Это затруднит восстановление логов. Чтобы защитить себя от этого, Вы должны вести логи и на своей машине, и на удаленной. Я рекомендую под лог-сервер выделить отдельную машину, т.е. она должна только собирать логи с других систем. Этот сервер должен быть хорошо защищен, на нем должны быть выключены все сервисы, он должен позволять доступ только с консоли. (см. Armoring Linux ). Убедитесь, что 514 порт закрыт или прикрыт файрволом. Это защитит Ваш лог-сервер от получения неверной либо неавторизованной информации из Интернет о заходах на Ваш сервер.
Для тех из Вас, кто желает помучить подлеца, я рекомендую перекомпилировать демон syslogd так, чтобы он читал другой конфигурационный файл, например, /var/tmp/.conf. Таким образом, взломщик не сможет понять, где же находится настоящий конфигурационный файл. Это легко сделать, изменив /etc/syslog.conf в source code
на другой файл, который Вы выберете. Затем, установим наш новый конфигурационный файл так, чтобы вести логи и локально, и на удаленном  лог-сервере (см. пример). Убедитесь в том, что Вы поддерживаете стандартную копию конфигурационного файла  /etc/syslog.conf , который отмечает все заходы на сервер. Даже если этот конфигурационный файл сейчас бесполезен, такое дублирование логов не даст понять взломщику, где находится удаленный лог-сервер.
Когда же Вы захотите проверить целостность логов на локальной машине, Вам будет достаточно сверить их с логами на удаленной машине.
Другой способ заключается в  защищенном методе ведения логов. Необходимо заменить Ваш syslogd binary другим, проверяющем целостность системы и с более широким диапазоном опций.Например, syslog-ng, http://www.balabit.hu/products/syslog-ng.html.

Соответствие шаблону.

Просматривая записи в логах, Вы обычно можете определить, сканируются ли Ваши порты. Большинство Script Kiddies сканируют сеть для определения какой-либо одной уязвимости. Если Ваши логи показывают большое количество соединений,  открытых одной и той же удаленной системой на каком-либо одном порту, то это больше всего похоже на сканирование с целью взлома. На большинстве Линуксовых систем TCP Wrapper инсталлируется по умолчанию. Поэтому записи о таких содинениях мы можем найти в файле /var/log/secure.
Для других видов UNIX, мы можем вести логи по всем соединениям, запустив inetd  с флагом "-t". Этот демон более продвинутый, чем линуксовый, он ловит те сканы, которые пропускает линуксовый.
Типичный скан с целью влома может выглядеть так  (поиск wu-ftpd уязвимости):
/var/log/secure
Apr 10 13:43:48 mozart in.ftpd[6613]: connect from 192.168.11.200
Apr 10 13:43:51 bach in.ftpd[6613]: connect from 192.168.11.200
Apr 10 13:43:54 hadyen in.ftpd[6613]: connect from 192.168.11.200
Apr 10 13:43:57 vivaldi in.ftpd[6613]: connect from 192.168.11.200
Apr 10 13:43:58 brahms in.ftpd[6613]: connect from 192.168.11.200

Хост 192.168.11.200 сканирует нашу сеть, последовательно перебирая IP-адреса. Повторяющиеся соединения с 21 ftp-портом говорят о том, что цель сканирующего хоста - wu-ftpd-взлом.  Бывает, что сканирование периодически возобновляется после перерыва. Предположим, что некто написал код для взлома imap, тогда Вы скорее всего по Вашим логам почувствуете наплыв сканирований . В следующем месяце хитом может стать ftp-сканирование. Текущие взломы можно увидеть здесь -  http://www.cert.org/advisories Иногда сканирование имеет целью взлом сразу по нескольким уязвимостям, в таком случае Вы увидите в логах многочисленные соединения удаленной системы сразу к нескольким портам.
Имейте в виду, что если Вы не ведете логи по определенному сервису, то Вы не будете знать, сканируют ли Вас на предмет его уязвимости. Например, по большинству rpc-соединений по умолчанию логи не ведутся. Значит, нужно просто добавить многие сервисы в файл /etc/inetd.conf для сопровождения их TCP Wrapper'ом.   Например, Вы можете добавить запись относительно NetBus. Вы можете настроить TCP Wrapper для более защищенного запрета соединений и ведения логов. (См.  Intrusion Detection)

Что есть средство взлома ?

Иногда Вы можете определить средства, используемые против Вашей сети. Некоторые из основных средств сканируют с целью конкретного взлома, например ftp-scan.c.Если хотя бы один открытый порт или уязвимость обнаружены в Вашей сети, они скорее всего воспользуются одноцелевым, односторонним средством. Тем не менее, существуют средства, перебирающие несколько уязвимостей, два наиболее популярных из них - sscan и nmap. Они представляют собой две различные категории сканирующих средств. Я очень рекомендую попробовать их в своей сети, Вас ждет немало сюрпризов. :)

          otto #./sscan -o 172.17.6.30

          --------------------------<[ * report for host mozart *
          <[ tcp port: 80 (http) ]>       <[ tcp port: 23 (telnet) ]>
          <[ tcp port: 143 (imap) ]>      <[ tcp port: 110 (pop-3) ]>
          <[ tcp port: 111 (sunrpc) ]>    <[ tcp port: 79 (finger) ]>
          <[ tcp port: 53 (domain) ]>     <[ tcp port: 25 (smtp) ]>
          <[ tcp port: 21 (ftp) ]>
          --<[ *OS*: mozart: os detected: redhat linux 5.1
          mozart: VULN: linux box vulnerable to named overflow.
          -<[ *CGI*: 172.17.6.30: tried to redirect a /cgi-bin/phf request.
          -<[ *FINGER*: mozart: root: account exists.
          --<[ *VULN*: mozart: sendmail will 'expn' accounts for us
          --<[ *VULN*: mozart: linux bind/iquery remote buffer overflow
          --<[ *VULN*: mozart: linux mountd remote buffer overflow
          ---------------------------<[ * scan of mozart completed *

           otto #nmap -sS -O 172.17.6.30

          Starting nmap V. 2.08 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
          Interesting ports on mozart (172.17.6.30):
          Port    State       Protocol  Service
          21      open        tcp        ftp
          23      open        tcp        telnet
          25      open        tcp        smtp
          37      open        tcp        time
          53      open        tcp        domain
          70      open        tcp        gopher
          79      open        tcp        finger
          80      open        tcp        http
          109     open        tcp        pop-2
          110     open        tcp        pop-3
          111     open        tcp        sunrpc
          143     open        tcp        imap2
          513     open        tcp        login
          514     open        tcp        shell
          635     open        tcp        unknown
          2049    open        tcp        nfs

          TCP Sequence Prediction: Class=truly random
                                   Difficulty=9999999 (Good luck!)
          Remote operating system guess: Linux 2.0.35-36

          Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds

Просмотрев свои логи, Вы можете определить, какое из этих двух средств было применено против Вас.
Чтобы сделать это, Вам нужно понять, как эти средства действуют. Во-первых, при использовании sscan
логи выглядят следующим образом:

/var/log/secure
Apr 14 19:18:56 mozart in.telnetd[11634]: connect from 192.168.11.200
Apr 14 19:18:56 mozart imapd[11635]: connect from 192.168.11.200
Apr 14 19:18:56 mozart in.fingerd[11637]: connect from 192.168.11.200
Apr 14 19:18:56 mozart ipop3d[11638]: connect from 192.168.11.200
Apr 14 19:18:56 mozart in.telnetd[11639]: connect from 192.168.11.200
Apr 14 19:18:56 mozart in.ftpd[11640]: connect from 192.168.11.200
Apr 14 19:19:03 mozart ipop3d[11642]: connect from 192.168.11.200
Apr 14 19:19:03 mozart imapd[11643]: connect from 192.168.11.200
Apr 14 19:19:04 mozart in.fingerd[11646]: connect from 192.168.11.200
Apr 14 19:19:05 mozart in.fingerd[11648]: connect from 192.168.11.200
/var/log/maillog
Apr 14 21:01:58 mozart imapd[11667]: command stream end of file, while reading line user=??? host=[192.168.11.200]
Apr 14 21:01:58 mozart ipop3d[11668]: No such file or directory while reading line user=??? host=[192.168.11.200]
Apr 14 21:02:05 mozart sendmail[11675]: NOQUEUE: [192.168.11.200]: expn root
/var/log/messages
Apr 14 21:03:09 mozart telnetd[11682]: ttloop:  peer died: Invalid or incomplete multibyte or wide character
Apr 14 21:03:12 mozart ftpd[11688]: FTP session closed

Sscan также может быть использован для сканирования на предмет наличия cgi-bin уязвимостей. Логи по таким попыткам ведутся не syslogd, Вы найдете их в access_log:

/var/log/httpd/access_log
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/phf HTTP/1.0" 302 192
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/Count.cgi HTTP/1.0" 404 170
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/test-cgi HTTP/1.0" 404 169
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/php.cgi HTTP/1.0" 404 168
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/handler HTTP/1.0" 404 168
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/webgais HTTP/1.0" 404 168
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/websendmail HTTP/1.0" 404 172
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/webdist.cgi HTTP/1.0" 404 172
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/faxsurvey HTTP/1.0" 404 170
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/htmlscript HTTP/1.0" 404 171
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/pfdisplay.cgi HTTP/1.0" 404 174
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/perl.exe HTTP/1.0" 404 169
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/wwwboard.pl HTTP/1.0" 404 172
192.168.11.200 - - [14/Apr/1999:16:44:50 -0500] "GET /cgi-bin/ews/ews/architext_query.pl HTTP/1.0" 404 187
192.168.11.200 - - [14/Apr/1999:16:44:50 -0500] "GET /cgi-bin/jj HTTP/1.0" 404 163

Обратите внимание, что полное соединение было сделано ко всем портам (SYN,SYN-ACK,ACK), а затем разорвано. Это происходит потому, что sscan действует на прикладном уровне. Sscan интересует не только, открыт ли ftp-порт, но и какой ftp-демон на нем запущен. Тоже относительно imap,pop и т.д.  Информацию такого же рода можно узнать с помощью sniffit - средства, обычно используемого для ворования паролей.
В приведенном ниже примере, установлено полное соединение для определения версии wu-ftpd, запущенного на удаленной системе. Если Вы видете в своих логах записи подобного рода, то Вас вероятнее всего сканируют с целью взлома каким-либо средством, способным определять путем установления с Вами полного соединения, что запущено на Вашем хосте.

mozart $ cat 172.17.6.30.21-192.168.11.200.7238
220 mozart.example.net FTP server (Version wu-2.4.2-academ[BETA-17](1) Tue Jun 9 10:43:14 EDT 1998) ready.

Nmap, как большинство сканеров портов, не интересует, что запущено на Вашей машине, но интересует, запущен ли определенный сервис. Для этого, nmap обладает рядом полезных опций, позволяющих определить вид соединения, включая SYN,  FIN,  Xmas, Null, etc. Детальное описание этих опций смотри на http://www.insecure.org/nmap/nmap_doc.html. В зависимости от их выбора сканирующим хостом, Ваши логи будут выглядеть по разному. Содинение, установленное с флагом -sT является полным соединением, поэтому в этом случае логи будут выглядеть также, как будто Вас сканировали sscan'ом. Но nmap по умолчанию сканирует больше портов.

/var/log/secure
Apr 14 21:20:50 mozart in.rlogind[11706]: connect from 192.168.11.200
Apr 14 21:20:51 mozart in.fingerd[11708]: connect from 192.168.11.200
Apr 14 21:20:51 mozart ipop2d[11709]: connect from 192.168.11.200
Apr 14 21:20:51 mozart in.rshd[11710]: connect from 192.168.11.200
Apr 14 21:20:51 mozart gn[11711]: connect from 192.168.11.200
Apr 14 21:20:51 mozart gn[11711]: error: cannot execute /usr/sbin/gn: No such file or directory
Apr 14 21:20:52 mozart in.timed[11712]: connect from 192.168.11.200
Apr 14 21:20:52 mozart imapd[11713]: connect from 192.168.11.200
Apr 14 21:20:52 mozart ipop3d[11714]: connect from 192.168.11.200
Apr 14 21:20:52 mozart in.telnetd[11715]: connect from 192.168.11.200
Apr 14 21:20:52 mozart in.ftpd[11716]: connect from 192.168.11.200

Обратите внимание на опцию -D (decoy-западня, ловушка). Эта опция позволяет подменить адрес сканирующего хоста. Вы можете увидеть 15 различных IP-адресов в одно и тоже время, но настоящим может оказаться только один из них. Будет очень-очень трудно определить, какой же из них - неподдельный. Еще чаще выбирается опция -sS . Это опция скрытого сканирования, когда посылается только SYN пакет. Если удаленный хост ответит, соединение тут же обрывается RST. Логи в таком случае выглядят таким образом (обратите внимание, что здесь приведены только первые пять записей):

/var/log/secure
Apr 14 21:25:08 mozart in.rshd[11717]: warning: can't get client address: Connection reset by peer
Apr 14 21:25:08 mozart in.rshd[11717]: connect from unknown
Apr 14 21:25:09 mozart in.timed[11718]: warning: can't get client address: Connection reset by peer
Apr 14 21:25:09 mozart in.timed[11718]: connect from unknown
Apr 14 21:25:09 mozart imapd[11719]: warning: can't get client address: Connection reset by peer
Apr 14 21:25:09 mozart imapd[11719]: connect from unknown
Apr 14 21:25:09 mozart ipop3d[11720]: warning: can't get client address: Connection reset by peer
Apr 14 21:25:09 mozart ipop3d[11720]: connect from unknown
Apr 14 21:25:09 mozart in.rlogind[11722]: warning: can't get client address: Connection reset by peer
Apr 14 21:25:09 mozart in.rlogind[11722]: connect from unknown

Обращайте внимание на все записи об ошибках. Так как SYN-ACK последовательность обрывается до установки полного соединения, демон не в состоянии определить систему-источник. Логи покажут, что Вас сканируют, но Вы не узнаете, кем. Эта ситуация усугубляется еще и тем, что большинство систем ( включая новые ядра Linux- 2.2 и последние 2.1), не ведут логи о таких ошибках. В ядрах 2.0.XX был баг - возврат accept() до установления "3-way handshake".
Nmap включает и другие скрытые опции: -sF -sX -sN. Записи о таком сканировании обычными демонами логов не ведутся, необходимо установить tcplogd, scanlogd or ippl.  Нкоторые коммерческие Firewalls также определяют и ведут логи по таким сканам (Я убедился в этом относительно Checkpoint Firewall 1). Обычный syslogd ведет полные логи только о сканировании с опцией -sT (полное соединение).

Получили ли они доступ ?

Этот вопрос должен возникнуть сразе после того, как Вы определили, что Вас сканируют и что их интересует.
Большинство сегодняшних взломов основано на buffer overflow (переполнении буфера, smashing the stack). Buffer overflow наступает тогда, когда программа( а чаще всего демон) получает больше данных, чем должна была получить, таким образом происходит переполнение критических областей памяти (thus overwriting critcical areas in memory). Затем выполняется определенный код, обычно дающий права рута. См. отличную статью ftp://ftp.technotronic.com/rfc/phrack49-14.txt.
Вы можете определить такую атаку  (например, mountd) по /var/log/messages ( либо /var/adm/messages для других разновидностей UNIX). Ниже приведен пример лога во время buffer_overflow-атаки на imapd.

Apr 14 04:20:51 mozart mountd[6688]: Unauthorized access by NFS client 192.168.11.200.
Apr 14 04:20:51 mozart syslogd: Cannot glue message parts together
Apr 14 04:20:51 mozart mountd[6688]: Blocked attempt of 192.168.11.200 to mount
~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P3?3?°^[?~@3?3?~K?°^F?~@??u?1?°^B?~@~E?ub?b^V¬<?t^F??t^K??°0??~HF???^°^B~
I^F??~IF^D°^F~IF^H°f1???~I??~@~I^F°^Bf~IF^L°*f~IF^N~MF^L~IF^D1?~IF^P°^P~IF^H°
f???~@°^A~IF^D°f?^D?~@?^D?L?R1?~IF^D~IF^H°f???~@~H?°?1??~@°????~@°????~@?.bin@~
I^F?.sh!@~IF^D1?~HF^G~Iv^H~IF^L°^K~I?~MN^H~MV^L?~@1?°^A1??~@?E??????Privet
ADMcrew~P(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(Apr 14 04:20:51
mozart ^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^
E^H(-^E^H-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E
^H(-^E^H-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^ H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E
^H(-^E^H(-^E

Трудно определить, была ли попытка взлома успешной. Один из способов - после попытки взлома сначала проверить, установлено ли с Вами соединение этим удаленным хостом. Если они успешно залогнились с удаленного хоста, значит, доступ получили. Другой способ - поискать в /etc/passwd новые accounts: "moof", "rewt", "crak0", "w0rm".  Эти эккоунты с uid=0 добавляются некоторыми скриптами взлома. Как только взломщик получил доступ,обычно он сначала подчищает логи и заменяет Ваш syslogd на троян (см. "Знай своего врага: III"). В таком случае Ваши логи Вам ничего не расскажут. Но это тема для другой статьи. Я же настоятельно рекомендую посмотреть http://www.cert.org/nav/recovering.html.
Для поиска аномалий в моих логах, я написал shell-срипт (Bourne shell script, Korn shell script), сканирующий мои логи.Больная детальная информация о мониторинге лог-файлов у Marcus Ranum.

Заключение

Ваши логи могут рассказать Вам многое о враге, поэтому необходимо позаботиться об их целостности. Лучший способ для этого - удаленный лог сервер. Затем необходимо уяснить, как выглядят записи в логах, свидетельствующие о сканировании Вашего хоста или сети. Основываясь на этом, Вы сможете определить, что является предметом интереса, и какие средства против Вас применяются. Основываясь на этом знании, Вы сможете лучше защитить свои системы.



Перевод  sciurus@mail.ru
4 апреля 2000г.