Access web Add modules industryArtboard 58 Analyse App control Created with Sketch. Adv_Artboard 21 industryArtboard 61 Oficer Adv_Artboard 22 Ресурс 31 Business process icon Created with Sketch. Business Shape Created with Sketch. Artboard 13 Central policy Certificate Chain Adv_Artboard 27 Combined Shape Copy 3 Created with Sketch. Artboard 50 Artboard 48 Artboard 51 Artboard 47 Artboard 46 Artboard 49 Shape Created with Sketch. Cloud B7B55A6B-30C0-4E73-9637-1794E793654E Created with sketchtool. B3F1D6A1-80F6-48B0-9EBD-786404E82049 Created with sketchtool. Shape Created with Sketch. Соц.Ответств._Artboard 29 Cup Artboard 12 Delete Develop Mobile control Detect data Corporate devices icon Created with Sketch. Use Development Монтажная область 52 Effective Ресурс 29 icon Created with Sketch. Created with Sketch. industryArtboard 56 Соц.Ответств._Artboard 28 785FDCCF-4DD0-4D89-92DF-A0C4AC73109E Created with sketchtool. 5F4F180E-E1AA-4429-9F5C-BB866CAD85FA Created with sketchtool. Ресурс 26 Fill 1 Created with Sketch. Flash Adv_Artboard 23 Ресурс 28 industryArtboard 54 Ресурс 35 Adv_Artboard 19 Hidden app Adv_Artboard 24 Page 1 Created with Sketch. CityArtboard 17 1451A714-6689-46A8-8D48-D7A246F52BE2 Created with sketchtool. industryArtboard 59 Like Group 9 Created with Sketch. Locking Mail Main modules Adv_Artboard 20 Created with Sketch. Messenger Microscope CityArtboard 18 industryArtboard 55 Effective PC Ресурс 30 Report PC IT Ресурс 34 industryArtboard 60 Shape Created with Sketch. 4658DE58-0BFB-4713-AC6C-19C0753FDB86 Created with sketchtool. Photocamera Printer automatic scan icon Created with Sketch. Report icon Created with Sketch. Safe web_1 Safe Safety CityArtboard 14 industryArtboard 57 Scale Соц.Ответств._Artboard 30 Lingvo search Technology search Shape Created with Sketch. Secure Computer Flash Messenger Notebook Printer Smartphone Web Server 56B89AD1-943C-4CF7-8FC3-C3DD35C6EE7C Created with sketchtool. Skills industryArtboard 53 Smartphone Facebook Copy_White Created with Sketch. LinkedIN Copy_White Created with Sketch. Telegram_White Created with Sketch. Twitter_White Created with Sketch. VK_White Created with Sketch. Socials icon Created with Sketch. Structure web Created with Sketch. Created with Sketch. Fill 1 Created with Sketch. Adv_Artboard 25 Update_1 Created with Sketch. Created with Sketch. Artboard 11 Fill 1 Created with Sketch. Web 1 2_1 3 4 Created with Sketch. Safe
20 декабря 2016

Семь быстрых тестов при внедрении DLP

Автор: Галиулин Тимур, старший инженер внедрения.

Здравствуйте, уважаемые читатели!

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

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

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

Основные вопросы, с которыми я уже столкнулся и хочу описать в статье:

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

Разобьем задачу на фрагменты.
Отдельно протестируем каждый канал перехвата и доступность инфраструктуры, для чего используем powershell. Его не надо ставить отдельно. В наших требованиях к испытаниям указана рабочая станция с ОС Windows. Эта операционная система встречается у заказчиков в 90% случаев.

Рассмотрим сложности каждого этапа работы подробно:

<source lang="powershell">
#Test file presence
if (test-path -path C:\file.txt)
   {
 Write-Host "$Server; Есть файл " -ForegroundColor Green
 remove-item "$path"
 }
 else
 {
 Write-Host "$Server; Нет файла" -ForegroundColor Red
 $File= New-Item -Path "$path" -ItemType "file"
 }
$path= "C:\file.txt"
$DATA= "строго конфиденциально"
#Increasing Filesize up to 100Kb
set-content -value (new-object byte[] 100kb) -encoding byte $path
add-Content -value $DATA -Path $path -Encoding UTF8</source>

  1. Ищем устройства
    Если заказчик не знает всю свою сеть, это не значит, что он не хочет всю ее обезопасить. Помогаем найти устройства. Задача в принципе банальная: проверить тип устройства , отвечает ли оно на SNMP-запросы, можно ли туда поставить наш софт. Под эти задачи давно существуют совершенно монструозные программы со встроенными браузерами, базами данных и планировщиками, хотя все эти задачи можно решить в пару строчек.
    Воспользуемся замечательным оператором интервала powershell. Вариант сканера сети в одну строчку, который я использую:
    <source lang="powershell">1..254 | ForEach {Test-Connection "172.16.1.$_" -Count 1 -ErrorAction SilentlyContinue}</source>

    Можно дописывать скрипт – экспортировать в файл и выбирать нужные поля из обьекта, но зачем? Достаточно просто скопировать список отозвавшихся хостов и вставить в csv-файл.
    Хотите имена хостов? Поищем их в DNS, обратившись к .NET-классу напрямую:
    <source lang="powershell">Import-Csv e:\file.csv|ForEach{$host =[System.Net.Dns]::GetHostByAddress($_.IPAddress)).Hostname </source>
  2. Тестируем все порты для нужных клиентов
    В случае если устройство найдено, но поставить агент туда мы почему-то не можем, скорее всего, мешает файервол. Поищем все открытые/закрытые порты, заявленные для корректной работы нашего ПО. Попутно формулируем ответы на вопросы, почему оно не ставится? Здесь можно вспомнить одно из самых популярных применение протокола telnet. Конечно, мы можем поставить telnet на нашу машину и поискать открытые порты на каждом устройстве.Но в этом нет необходимости – это слишком долго.
    Я использую основу для скрипта, которую уже давно нашел в глубинах интернета.
    Зададим список нужных нам портов и диапазон адресов. И сделаем два цикла:
    <source lang="powershell">
    $port = "25","21","22","15101","15003","15100","15505","15506","593","138", "137","139","445","1433","3389","443"
    $net = "10.60.20"
    $range = 1..4
    foreach ($px in $port)
    {
    foreach ($r in $range)
    {
    $ip = "{0}.{1}" -F $net,$r if(Test-Connection -BufferSize 32 -Count 1 -Quiet -ComputerName $ip){
    try
    {
    $socket = new-object System.Net.Sockets.TcpClient($ip, $px)
    If($socket.Connected)
    {
    write "$ip $px open"
    $socket.Close()
    }
    }catch{}
    }
    }
    } </source>
    На выходе получим примерно следующее:
    192.168.1.5 22 open
    192.168.1.5 443 open
  3. Исключаем приложения в массовом порядке
    Вы успешно открыли порты и поставили агент DLP, но получили оккупационную армию на своем компьютере: половина ваших приложений отказывается выйти в интернет, другая половина перестала подключаться ко внутренним ресурсам? Все дело в измененном сертификате.
    Агент DLP подменяет сертификат приложения и, если сервер не в состоянии его проверить, возникает ошибка. Стоит сказать, что это происходит только в случае проверки сертификата на другом конце, и большинство вендоров (например, KasperskyLab, VMware, и InfoWatch в том числе) подобную проверку проводят.
    Рассмотрим пример:
    Необходимо единовременно внести более сотни исключений приложений из перехвата. Приложения собраны в отдельной директории, распределены по поддиректориям, имеющим понятные названия, например:
    c:\исключения
    • Photoshop.exe
    • Illustrator.exe
    • MSACCESS.EXE
    • OUTLOOK.EXE
    • WINWORD.EXE
    • Delphi 7
    • tnsping.exe
    и т.д. Пишем сценарий, который просмотрит все файлы в указанной директории, и SQL-сценарий, загружающий исключения непосредственно в БД MS SQL.
    Уместимся примерно в 20 строчек. Сначала мы пройдемся по файлам и вытащим из них цифровую подпись издателя, которая нужна для создания исключения.
    <source lang="powershell">
    $path="C:\ исключения\"
    $list=Get-ChildItem $path|? {$_.name -like "*.exe"}
    foreach ($i in $list) {
    $a=Get-AuthenticodeSignature .\program.exe|Select -ExpandProperty SignerCertificate|fl -Property Subject
    $b=$a|Out-String
    $b -match "CN=(\w+\s+\w+)"
    $matches[1]> file.txt
    }</source>

    В системе уже есть некие исключения, но если заглянуть в СУБД MSSQL, их точно меньше 50. Чтобы не попасть на constraint и не получить ошибку, сделаем ID первого исключения равным 99.
    Рассмотрим вариант скрипта для MSSQL с Windows-авторизацией:
    <source lang="powershell">$inc=99
    $conn= New-Object system.data.sqlclient.sqlconnection
    $conn.ConnectionString="data Source=localhost\SQLEXPRESS;Initial catalog=DBO;Integrated Security=SSPI"
    $conn.open()
    $cmd=$conn.createcommand()
    $cmd.connection=$conn
    foreach ($line in $list=gc "file.txt") {
    $inc=$inc+1
    $query= "INSERT INTO [sqlexpress].[dbo].[ExcludedApplication]([Id],[Description],[ApplicationName],[Interceptor],[OriginalName],[SubjectDN]
    ,[Path]) VALUES ('$inc','$line.name','$line.name','3','test','test','')"
    $cmd.commandtext=$query
    $cmd.ExecuteNonQuery()
    }
    $conn.close() </source>

     

    В строчке с INSERT я пишу test в полях обязательных к заполнению, но это всего лишь пример.

  4. Тестируем почту
    Вы поставили агент и все у вас работает. Известно, что сама по себе DLP не представляет для заказчика большого интереса. Необходимы кастомизация и настройки перехвата тех данных, которые нельзя отправлять наружу.
    Особенно остро эта проблема стоит в случае обновления или донастройки уже работающих систем. Возникает дилемма. С одной стороны, нельзя потерять трафик потенциальных нарушителей в процессе тестирования, с другой, систему все-таки нужно настроить, отправив события на анализ.
    Начнем с основного канала передачи данных – почты. Отправим письмо без клиентов и веб-интерфейса. Вы все еще используете telnet для отправки писем? Учитываем, что попадание тестовых писем к реальным пользователям нежелательно.
    Разумеется, ваш почтовый сервер должен позволить вам отправить почту. Впрочем, вы можете отправлять напрямую в DLP, если открыть 25 порт. Вдаваться в подробности не буду, дабы не раскрывать архитектуру продукта. В скрипте подстрахуемся на случай битых кодировок, явно ее указав.
    В простом случае поместимся в две строчки:
    <source lang="powershell">$enc=[system.text.encoding]::UTF8
    Send-MailMessage -From -To -Subject Hello -SmtpServer 127.0.0.1 -Encoding $enc -Attachments "C:\text.txt" -Body "строго конфиденциально"</source>

    Тут вы можете отправить любые термины и любые вложения в письме, можете тестировать любое количество адресатов и периметров. Завернув пример в цикл, получится имитировать реальный трафик и выполнять настройку, не отвлекаясь на генерацию событий в систему. Если вы уже все закрыли и настроили SSL и авторизацию, все будет сложнее и длиннее, не стоит с этим торопиться, пока все не проверите.
    <source lang="powershell">$SMTPAuthUsername = "username"
    $SMTPAuthPassword = "password"
    $emailattachment = ""
    function send_email {
    $mailmessage = New-Object system.net.mail.mailmessage
    $mailmessage.from = ("")
    $mailmessage.To.add("")
    $mailmessage.Subject = "LOGON"
    $mailmessage.Body = $emailbody
    $attachment = New-Object System.Net.Mail.Attachment($emailattachment, 'text/plain')
    $mailmessage.Attachments.Add($attachment)
    $SMTPClient.EnableSsl = $true
    $mailmessage.IsBodyHTML = $true
    < $SMTPClient = New-Object Net.Mail.SmtpClient("192.168.34.11", 25)
    < $SMTPClient.Credentials = New-Object System.Net.NetworkCredential("$SMTPAuthUsername", "$SMTPAuthPassword")
    < $SMTPClient.Send($mailmessage)
    < }
    < send_email </source>
  5. Тестируем запись теневых копий файлов на диск
    Второе по популярности применение DLP – это контроль съёмных носителей.
    Допустим, нам нужно видеть в системе файлы определенных расширений и размера с целью перехвата, либо исключения.
    Тут есть нюанс: при подключении носителя система сама выбирает метку тома. Чтобы найти метку по имени примонтированого устройства, понадобится написать скрипт побольше. Метку тома лучше запомнить и указать в пути, дабы не тратить время. Не отключайте флешку. Сложнее всего найти алгоритм быстрого заполнения файла мусором. Операция для ста файлов оказалась слишком долгой.
    Приведу простой пример. Проверим, создали ли мы уже файл, если нет – создаем, если есть – удаляем и создаем.
  6. Выложим файл в сеть
    Сейчас уже появились сайты вроде dlptest.com. Но выход в интернет может быть ограничен и возможности скрипта все же шире. По умолчанию система работает только с post-запросами, значит, в сеть надо выложить хоть что-то. При авторизации на сайте можно протестировать систему на перехват паролей. Воспользуемся встроенным web-клиентом. В случае наличия прокси – вам понадобится также указать настройки сервера:
    <source lang="powershell">
    #UPLOAD FILE
    $srv = “http://www.filedropper.com”
    $proxylgn="domain\user"
    $proxypwd="Password"
    $proxyadr= "proxy:8080"
    $File= “C:\test.txt”
    Write-Host -Object "http url: $srv"
    $webclient = New-Object -TypeName System.Net.WebClient

    #Other user
    #$creds=Get-Credential
    #$webclient.Proxy.Credentials=$creds

    # Custom proxy
    #$WP =New-Object System.Net.WebProxy $proxyadr
    #$lgn= ConvertTo-SecureString $proxylgn -AsPlainText -Force
    #$pwd = ConvertTo-SecureString $proxypwd -AsPlainText -Force
    #$WP.Credentials = New-Object System.Net.NetworkCredential ("$lgn", "$pwd")
    #$webclient.proxy.credentials=$WP.Credentials

    #Logon on site
    #$webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass)

    $url = New-Object -TypeName System.Uri -ArgumentList $srv
    Write-Host -Object "Uploading $File..."
    $webclient.UploadFile($url, $File) </source>
  7. Тестируем печать
    Когда я начал тестировать печать для быстрого формирования событий на корпоративном стенде, мне позвонили из московского офиса и сообщили, что их принтер вышел из строя, и попросили завершить процесс. Пришлось переключиться на печать в XPS – открытый формат разметки на базе XML. В этом случае вам и принтер под рукой не нужен, и событие вы создадите. Строчку для печати на принтер по умолчанию я закомментировал:
    <source lang="powershell">
    #PRINT TEST - default page
    #$printer=gwmi win32_printer|? {$_.default -eq "True"}
    #$printer.printtestpage()
    < #For XPS print
    < $ptr = (gwmi win32_printer | ? { $_.name -match 'xps'}|Select-Object -First 1).name
    < $ptr
    < echo "DATA"| Out-Printer -Name $ptr</source>

Что получилось и зачем это нужно:

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

Удачных тестов!

Подпишитесь на рассылку INFOWATCH