Что такое баг бери
1. Немного этимологии и энтомологии
Давайте посмотрим попристальней на такое знакомое и (до боли?) родное слово БАГ. Происходит оно от английского слова Bug, означающего «насекомое». Есть еще много сторонних значений, в частности английское выражение «to go bugs» — сойти с ума, что легко кореллируется со вполне русским «тараканы в голове завелись». Также вспоминаются и «жучки на линии» (тоже, кстати, по-английски – bugs). И опять мы пришли к насекомым.
Еще в 1878 году, Томас Альва Эдисон (да-да, тот самый!) в письмах к своему соратнику Пускасу писал: «It has been just so in all of my inventions. The first step is an intuition, and comes with a burst, then difficulties arise — this thing gives out and [it is] then that 'Bugs' — as such little faults and difficulties are called — show themselves and months of intense watching, study and labor are requisite before commercial success or failure is certainly reached». Тем же словом, инженеры называли и сбои радарной электроники во время второй Мировой Войны. Конечно, более распространена история о том, что в 1946 году разработка компьютера Марк-2 (Mark-II) были приостановлена из-за сбоя его функционирования, вызванного попаданием мотылька между контактов. Трупик мотылька был извлечен и приклеен к отчету липкой лентой с комментарием «First actual case of bug being found.» («Первый реальный случай нахождения жучка»). Как нетрудно догадаться, примерно оттуда же «растут уши» и слова «дебаггер» (debugger) – буквально «избавитель от жучков».
2. Виды багов.
Простейший (не как инфузория-туфелька, а самый простой для понимания, модно сказать «классический») баг – это несоответствие между ожидаемым результатом (ОР) и фактическим результатом (ФР). Разберем это на примере:
Действия | Ожидаемый результат | Фактический результат |
---|---|---|
Ввести в ячейку выражение «=2+2*2» (без кавычек) и нажать ENTER | 6 | 8 БАГ. |
(это, кстати, реальный баг старого Microsoft Excel – он не учитывал приоритета математических операций, по которому умножение имеет высший приоритет по сравнению со сложением)
Все просто. Ждем одно – получаем другое. Баг.
Я не буду перечислять все подвиды бага классического – от опечаток в данных и опечаток в коде до бесконечных циклов, от использования оператора присвоения вместо оператора проверки равенства до использования неинициализированной переменной, от состояния гонки (race condition) в мультипоточных приложения до переполнения буфера, и так далее, и тому подобное – все это достаточно обыденные и ясные явления. Обратимся к малознакомой экзотике.
2.1. Гейзенбаг (Heisenbug)
Баг, названный в честь Гейзенбергского Принципа неопределенности – концепции квантовой физики. Простым (хоть слово «просто» здесь и не очень применимо) примером подобного бага будет являться ошибка, проявляющаяся, когда программа запускается на исполнение в рабочей среде, но исчезающая, когда программу запускают в дебаггере.
2.2. Борбаг (Bohrbug)
Тип бага, названный так в честь атомной модели Бора. В противоположность Гейзенбагу, он проявляется постоянно при одном и том же стечении обстоятельств. Вопрос в том, что весь набор обстоятельств бывет невозможно (или очень трудно) отследить.
2.3. Мандельбаг (Mandelbug)
Назван в честь Бенуа Мандельброта, внесшего огромный вклад в теорию фракталов. Мандельбагами называют ошибки, чьи причины настолько сложны и неясны, что фактически кажутся хаотичными и не поддающимися описаниями. (ключевое слово «кажутся»). Подобное, может быть вызвано, например, медленной реакцией системы – то есть ошибка уже произошла, но об этом вы узнаете только через некоторое время, что сильно затруднит локализацию причин.
2.4. Шрединбаг (Schroedinbug)
Шрединбаг назван в честь известного парадокса с кошкой Шредингера (или эта несчастная животина – кот?). Он заключается в том, что кто-нибудь читает код программы (работающей уже некоторое время) и восклицает «Да этого не может быть! Она просто не может функционировать!», после чего программа прекращает свое функционирование пока данная ошибка не будет исправлена. Будучи, казалось бы, абсолютно фантастической, данная ошибка попадается в реальности – спросите знакомых ветеранов- разработчиков, они подтвердят. Хотя, конечно, последующий анализ, как правило, позволяет отнести ошибку к разделам 2.1, 2.2 или 2.3, это удается не всегда.
2.5. Фазы луны
На самом деле такой ошибки не существует – это популярная отговорка тех, кто не хочет (не имеет желания и/или времени) разбираться в сложных причинах возникновения ошибки. Тем не менее, в истории существует пара примеров, когда ошибки возникали буквально из-за фаз луны. Я не буду приводить здесь эти истории, надеясь, что никому из нас не придется работать со столь сложными устройствами. Тем не менее, в любом случае, хотелось бы предостеречь всех от неосторожных умозаключений и попросить быть более внимательными, настойчивыми и скрупулезными в своей работе.
2.6. Статистический (более известный как количественный) баг
Баг возникающий при произведении программой большого количества каких-либо действий. Примером данной ошибки может служить запуск программы, которая должна равномерно расположить на плоскости некоторое количество точек. Если, например, при большом количестве точек программа не только неправильно располагает их, но и норовит расположить все на одной стороне плоскости (при этом до определенного количества точек работая прекрасно) – вуаля, количественный баг.
2.7. Демонстрационный эффект.
Ну и конечно, известный всем, «эффект первого показа», не раз случавшийся и с вашим покорным слугой. Как только приходит пора показать, например, прекрасно функционировавший на тестовом стенде юнит, обязательно происходит что-то ужасное. Причны, как правило, тривиальны – пропуск «незначительных» тест-кейсов, невнимательность к деталям и неучтенные юз-кейсы. Опять же – будьте внимательней.
На этом я закончу краткий обзор багов, буду рад Вашим замечаниям и предложениям.
Хочу участвовать, что надо делать?
Для тех, кто решил попробовать свои силы и возможности в поиске ошибок могу посоветовать несколько основных этапов, которые приведут к победе:
Следите за новостями. Обновился скоп программы — бегом проверять новые сервисы. Производитель добавил новый функционал, расширил старый или интегрировал сторонний сервис? — большая возможность, особенно в сложной инфраструктуре допустить ошибку.
Упорство. Скрупулезное исследование, не упускать никаких деталей. Хорошая практика будет периодически сравнивать результаты прошлых проверок с текущем состоянием системы.
Поиск. Ищите и обрящете. Большинство крупных багов находят на "не публичных" поддоменах и директориях. Здесь вам пригодятся инструменты по выявлению поддоменов и хорошие листы словарей для брута директорий и поддоменов.
Исследование. Отложите автоматические сканеры, просеивайте веб-приложение (а большинство Bug Bounty связано именно с вебом) как песок сквозь сито для поиска крупинок золота. Здесь я рекомендую использовать Burp Suite или Owasp Zap — лучше инструментов нет. Почти все крупные победы в баутни — результат работы с этими инструментами (практически на любом публичном репорте можно это увидеть).
Исследуйте. Скачайте приложение для локального исследования, если это возможно. Читайте отчеты других участников — это может дать пищу для ума. Тот же взлом фейсбука — многие российские багхантеры видели этот поддомен, даже пытались с ним что-то делать — но "не докрутили". Хорошим подспорьем для этого будет ресурс: The unofficial HackerOne disclosure Timeline
BerryMine
Нравится Показать список оценивших
BerryMine запись закреплена
Спасибо Мешок костей
Мешок костей / MC Resource Packs
Нравится Показать список оценивших
А где коменты?
Нравится Показать список оценивших
BerryMine запись закреплена
Группа
Еще немного Тедена
Нравится Показать список оценивших
BerryMine запись закреплена
Нравится Показать список оценивших
Нравится Показать список оценивших
BerryMine запись закреплена
Нравится Показать список оценивших
BerryMine запись закреплена
Нравится Показать список оценивших
Сначала старые
А есть в виде ЛСД?
Нравится Показать список оценивших
Нравится Показать список оценивших
BerryMine запись закреплена
Astronomia
Нравится Показать список оценивших
Сначала старые
Нравится Показать список оценивших
Bug Bounty плюсы и минусы
Теперь остановимся на плюсах и минусах Bug Bounty программ.
Очевидными плюсами будет:
- непрерывность процесса тестирования;
- стоимость (выплаты вознаграждений будут меньше стоимости наемных специалистов);
- большое покрытие.
Очевидными минусами будет:
- большое количество дублей;
- огромное количество отчетов сканеров (фолсов);
- узкая направленность;
- оспаривание и «доказательства» уязвимостей.
Зачастую многие багхантеры, участвующие в программах Bug Bounty ограничиваются своими "коронными" фишками, и не исследуют что-то другое, либо наоборот, ставят под сканеры все подряд в надежде уловить хоть что-то. Это дает разноплановый, но не полный подход к тестированию. Также, огромное количество фолс срабатываний сканеров может завалить команду разработчиков ненужной работой (это и дополнительные проверки и отклики по каждому репорту — которых может быть очень много).
Открытые программы
Большинство компаний представлено на площадках — агрегаторах, таких как HackerOne или BugCrowd.
Многие российские компании открыли как собственные программы, так и профили на HackerOne. Среди них такие компании, как: Яндекс, Майл.ру, QiWi, Вконтакте и многие другие. Да что говорить, если даже у Пентагона есть своя программа Bug Bounty. (Взломать Пентагон, получить деньги и остаться на свободе — похоже на мечту хакера, но уже суровая реальность).
Средняя сумма выплат составляет от $200 до $1000, в зависимости от уязвимости и места ее нахождения.
Вот, например, оценка стоимости обнаруженных уязвимостей в программе "Охота за ошибками" — Яндекс:
- A01. Инъекции 170000 руб. (критичные сервисы); 43000 руб. (прочие сервисы).
- A02. Межсайтовый скриптинг – A05. Межсайтовая подделка запросов 17000 руб. (критичные сервисы); 8500 руб. (прочие сервисы).
- A06. Ошибки конфигурации веб-окружения – A10. Открытое перенаправление 8500 руб.(критичные сервисы); 5500 руб. (прочие сервисы).
Такой баг в режиме вафли.
Доброго времени суток танкисты, все таки я вчера поиграл немного в режиме последний ваффентрагер. в первом бою против вафли все было нормально, мы дружно собирали материю, сливали ее в резисторе и благополучно убили вафлю( на карте песчаная река) второй бой меня сильно удивил( на карте линия зикфрида) как только я подбиру материю с убитых нами приспешников, а сделал я это три раза таку тут же пропадали резисторы с карт вообщим сразу становилось некуда вести материю, так ничего отгрузить не получилось,, но как только время материи в хранении в танке кончилось то сразу появлялись резисторы. вот такая блин оказия.
sanyok084 ответил 2 часа назадДоброе утро ребята.Даже не знаю,что тебе сказать,может это такая задумка и вовсе не баг. Я не играл пока,но желание есть.Может в ЦПП отпиши,они наверника точный ответ дадут,хотя и ребята может чё толковое скажут.
lord24 ответил 2 часа назадя так понимаю кое-что изменилось в этом режиме в отличие от прошлогоднего тогда такого не было если я правильно понял тут надо уточнить у игроков которые больше времени проводить в игре и именно в этом режиме
Byryndyk_v_tanke ответил 2 часа назадЭто не баг, механика подразумевает появление сразу нескольких точек часовых где можно получить материю, также есть 2 точки куда ее отгружать, что бы вафля не могла контрить обе точки, но после того как одна точка уничтожена, то другая временно пропадает до "перезарядки". Вы попадали в ситуацию когда брали одновременно 2 куска материи, но 1 привозили к генератору, и ломали его, на время второй генератор пропадает и материя которая осталась не использованая просто сгорает, проще говоря взять вы можете 2 материи но доставить только ОДНУ, кто первый успел того и тапки так сказать))
Tatarin__75 ответил 16 минут назадСкорее всего произошел именно тот пердимонокль,который описал танковый грызун.Хотя в этом режиме багов хватает.Вот-экспресс забит по горлышко постами о постоянных поломках.
Как правильно составлять баг-репорты
Правила оформления записей в баг-трекере в каждой компании свои — это зависит как от политики компании, технологии разработки, используемного баг-трекера, типа проекта и много чего еще. Но в любом случае хороший баг-репорт обладает определенными характеристиками.
Если кратко, то хороший баг-репорт позволяет:
1. воспроизвести проблему (это не всегда возможно, но надо стремиться).
2. понять, в чем проблема и какова ее важность.
Как написать хороший баг-репорт?
Для начала надо подготовиться. Если вы обнаружили баг, не стоит моментально бежать в баг-трекер и писать «ничего не работает!». Воспроизведите ошибку. Воспроизвелась? Отлично. Не воспроизвелась? Значит, что-то вы не учли. Вспоминайте, что делали.
Снова воспроизвелась? Ура! А теперь минимизируйте количество шагов для воспроизведения, удостоверьтесь, что нет ничего лишнего.
Если используются какие-то входные данные, удостоверьтесь, что и они не содержат лишнего (действительно ли весь этот здоровенный кусок текста роняет редактор, а не один символ из него?).
Когда вы поняли, какие именно данные и какие ваши действия приводят к проблеме, кратко сформулируйте ее суть — придумайте заголовок баг-репорта. Опишите проблему настолько подробно и конкретно, насколько позволяет заголовок, при этом не увлекаясь его длиной :)
Пример плохого заголовка: «Все виснет, когда я вставляю текст из буфера обмена»
Пример «более хорошего» заголовка: «Редактор зависает при вставке текста, содержащего символ N, из буфера обмена по Ctrl+V»
Allenary: Можно еще упомянуть принцип «Что? Где? Когда?». В большинстве случаев это помогает написать удачный заголовок/подробное описание, Например,
Что: неправильный расчет данных
Где: на странице NNN
Когда: после ввода а поле Y отрицательного значения.
Старайтесь не писать фразы типа «я кликаю на ссылку», «я нажимаю кнопку» и им подобные. И заголовок, и описания шагов — это руководство к действию для тех, кто будет исправлять проблему, поэтому лучше формулировать как «кликнуть на ссылку», «нажать на кнопку».
Теперь откройте баг-трекер, начните заполнять форму баг-репорта.
Запишите заголовок.
В каких-то баг-трекерах поля «Подробное описание» и «Шаги для воспроизведения» различаются, в каких-то — нет.
Если поле «Подробное описание» есть, опишите в нем проблему более подробно — уточните те детали, которые пришлось опустить в заголовке. Если вы понимаете, в чем причина проблемы (используется устаревшая формула для расчетов, не учитывается какое-то значение и т.д.) — тоже пишите все здесь. Если не знаете — лучше не гадайте.
Если в форме записи об ошибке нет отдельного поля Affect version (версия продукта, в котором проявляется проблема), то укажите версию здесь.
«Шаги для воспроизведения» — основное поле для заполнения в баг-репорте.
Запишите шаги, которые вы определили. Как уже было сказано, шагов должно быть необходимо и достаточно для воспроизведения проблемы. Лишние не пишите. Необходимых тоже не пропускайте :)
После описания шагов обязательно напишите результат — что получилось.
Далее здесь же опишите ожидаемый результат, если это необходимо. Конечно, не стоит писать «Редактор не падает», но если, например, результаты расчетов не соответствуют ожидаемым, то это надо указывать.
Таким образом, описание шагов для воспроизведения должно выглядеть как-то так:
Шаги для воспроизведения:
1. Открыть…
2. Кликнуть…
3. Ввести в поле… значение N1
4. Ввести в поле… значение N2
4. Кликнуть кнопку Calculate
Результат:
В поле Result отображается V1.
Ожидаемый результат:
В поле Result отображается V2.
Если требуются исходные файлы, данные, дампы и пр. — сразу приаттачьте. Само собой, файлы должны содержать только информацию, необходимую для воспроизведения ошибки. Подчистите все лишнее.
Если проблема с визуальным отображением, то скриншот обязателен — можно будет понять ошибку и без воспроизведения шагов. Khizhnyak: На скриншотах лучше указывать место с ошибкой. Стрелочкой или просто полосой контрастного цвета. Здорово ускоряет «чтение» скриншота.
Но вставлять скриншоты в каждый баг-репорт совершенно не обязательно: пожалуйста, не плодите лишних сущностей. Если он ничем не поможет в воспроизведении проблемы — не тратьте время на его изготовление.
Кстати, про видео воспроизведения ошибки: оно может помочь разве что для подтверждения, что проблема действительно есть, просто воспроизвести ее сложно. Но часто ли вы делаете запись экрана заранее? :)
По остальным полям.
Severity, Priority.
Наличие этих полей и значения в этих полях отличаются от багтрекера к багтрекеру.
Severity — это критичность бага с точки зрения тестировщика: фича, опечатка в тексте, мелкая проблема, значительная проблема, падение продукта, блокирующая проблема и пр.
Priority — приоритет, с которым проблема должна быть исправлена.
Если есть оба поля, то тестировщик, как правило, выставляет только Severity, а Priority — старший тестировщик/старший программист/менеджер или любой другой ответственный за это дело человек.
Если есть только одно поле, то выставляем его.
«Какой приоритет ставить багу?» На этот вопрос нет однозначного ответа, все зависит от каждого конкретного случая. Но старайтесь не увлекаться и не ставить всем багам подряд высокий или критичный приоритет, реально оценивайте их критичность для проекта.
Какие бывают баги
1. Немного этимологии и энтомологии
Давайте посмотрим попристальней на такое знакомое и (до боли?) родное слово БАГ. Происходит оно от английского слова Bug, означающего «насекомое». Есть еще много сторонних значений, в частности английское выражение «to go bugs» — сойти с ума, что легко кореллируется со вполне русским «тараканы в голове завелись». Также вспоминаются и «жучки на линии» (тоже, кстати, по-английски – bugs). И опять мы пришли к насекомым.
Еще в 1878 году, Томас Альва Эдисон (да-да, тот самый!) в письмах к своему соратнику Пускасу писал: «It has been just so in all of my inventions. The first step is an intuition, and comes with a burst, then difficulties arise — this thing gives out and [it is] then that 'Bugs' — as such little faults and difficulties are called — show themselves and months of intense watching, study and labor are requisite before commercial success or failure is certainly reached». Тем же словом, инженеры называли и сбои радарной электроники во время второй Мировой Войны. Конечно, более распространена история о том, что в 1946 году разработка компьютера Марк-2 (Mark-II) были приостановлена из-за сбоя его функционирования, вызванного попаданием мотылька между контактов. Трупик мотылька был извлечен и приклеен к отчету липкой лентой с комментарием «First actual case of bug being found.» («Первый реальный случай нахождения жучка»). Как нетрудно догадаться, примерно оттуда же «растут уши» и слова «дебаггер» (debugger) – буквально «избавитель от жучков».
2. Виды багов.
Простейший (не как инфузория-туфелька, а самый простой для понимания, модно сказать «классический») баг – это несоответствие между ожидаемым результатом (ОР) и фактическим результатом (ФР). Разберем это на примере:
Действия | Ожидаемый результат | Фактический результат |
---|---|---|
Ввести в ячейку выражение «=2+2*2» (без кавычек) и нажать ENTER | 6 | 8 БАГ. |
(это, кстати, реальный баг старого Microsoft Excel – он не учитывал приоритета математических операций, по которому умножение имеет высший приоритет по сравнению со сложением)
Все просто. Ждем одно – получаем другое. Баг.
Я не буду перечислять все подвиды бага классического – от опечаток в данных и опечаток в коде до бесконечных циклов, от использования оператора присвоения вместо оператора проверки равенства до использования неинициализированной переменной, от состояния гонки (race condition) в мультипоточных приложения до переполнения буфера, и так далее, и тому подобное – все это достаточно обыденные и ясные явления. Обратимся к малознакомой экзотике.
2.1. Гейзенбаг (Heisenbug)
Баг, названный в честь Гейзенбергского Принципа неопределенности – концепции квантовой физики. Простым (хоть слово «просто» здесь и не очень применимо) примером подобного бага будет являться ошибка, проявляющаяся, когда программа запускается на исполнение в рабочей среде, но исчезающая, когда программу запускают в дебаггере.
2.2. Борбаг (Bohrbug)
Тип бага, названный так в честь атомной модели Бора. В противоположность Гейзенбагу, он проявляется постоянно при одном и том же стечении обстоятельств. Вопрос в том, что весь набор обстоятельств бывет невозможно (или очень трудно) отследить.
2.3. Мандельбаг (Mandelbug)
Назван в честь Бенуа Мандельброта, внесшего огромный вклад в теорию фракталов. Мандельбагами называют ошибки, чьи причины настолько сложны и неясны, что фактически кажутся хаотичными и не поддающимися описаниями. (ключевое слово «кажутся»). Подобное, может быть вызвано, например, медленной реакцией системы – то есть ошибка уже произошла, но об этом вы узнаете только через некоторое время, что сильно затруднит локализацию причин.
2.4. Шрединбаг (Schroedinbug)
Шрединбаг назван в честь известного парадокса с кошкой Шредингера (или эта несчастная животина – кот?). Он заключается в том, что кто-нибудь читает код программы (работающей уже некоторое время) и восклицает «Да этого не может быть! Она просто не может функционировать!», после чего программа прекращает свое функционирование пока данная ошибка не будет исправлена. Будучи, казалось бы, абсолютно фантастической, данная ошибка попадается в реальности – спросите знакомых ветеранов- разработчиков, они подтвердят. Хотя, конечно, последующий анализ, как правило, позволяет отнести ошибку к разделам 2.1, 2.2 или 2.3, это удается не всегда.
2.5. Фазы луны
На самом деле такой ошибки не существует – это популярная отговорка тех, кто не хочет (не имеет желания и/или времени) разбираться в сложных причинах возникновения ошибки. Тем не менее, в истории существует пара примеров, когда ошибки возникали буквально из-за фаз луны. Я не буду приводить здесь эти истории, надеясь, что никому из нас не придется работать со столь сложными устройствами. Тем не менее, в любом случае, хотелось бы предостеречь всех от неосторожных умозаключений и попросить быть более внимательными, настойчивыми и скрупулезными в своей работе.
2.6. Статистический (более известный как количественный) баг
Баг возникающий при произведении программой большого количества каких-либо действий. Примером данной ошибки может служить запуск программы, которая должна равномерно расположить на плоскости некоторое количество точек. Если, например, при большом количестве точек программа не только неправильно располагает их, но и норовит расположить все на одной стороне плоскости (при этом до определенного количества точек работая прекрасно) – вуаля, количественный баг.
2.7. Демонстрационный эффект.
Ну и конечно, известный всем, «эффект первого показа», не раз случавшийся и с вашим покорным слугой. Как только приходит пора показать, например, прекрасно функционировавший на тестовом стенде юнит, обязательно происходит что-то ужасное. Причны, как правило, тривиальны – пропуск «незначительных» тест-кейсов, невнимательность к деталям и неучтенные юз-кейсы. Опять же – будьте внимательней.
На этом я закончу краткий обзор багов, буду рад Вашим замечаниям и предложениям.
Bug Bounty: заработай на чужих ошибках
В этой статье я расскажу о Bug Bounty программах, их плюсах и минусах, а также как на этом зарабатывают.
В первую очередь давайте определим что такое Bug Bounty: программа выплата награды за обнаружение проблем в безопасности сервисов и приложений компании. На русский язык уместнее всего это переводится как "Охота за ошибками".
Т.е. это некий свод правил "взаимодействия" с информационными ресурсами компании. Обычно в него входит регламент проведения программы, перечень ресурсов, описание принимаемых уязвимостей, размеры вознаграждения. В классическом исполнении это описание того, что можно "ломать" и сколько багхантер получит за ту или иную уязвимость.
Так выглядит Bug Bounty снаружи. Что это дает компании? В первую очередь непрерывный процесс "проверки на прочность": специалисты с различным уровнем знаний, инструментарием и часовыми поясами в режиме нон-стоп атакуют ресурсы компании. Со стороны компании задействованы ресурсы на:
- мониторинг систем;
- реагирование и обработка репортов;
- баг-фиксинг (быстры или не очень).
Bug Bounty плюсы и минусы
Теперь остановимся на плюсах и минусах Bug Bounty программ.
Очевидными плюсами будет:
- непрерывность процесса тестирования;
- стоимость (выплаты вознаграждений будут меньше стоимости наемных специалистов);
- большое покрытие.
Очевидными минусами будет:
- большое количество дублей;
- огромное количество отчетов сканеров (фолсов);
- узкая направленность;
- оспаривание и «доказательства» уязвимостей.
Зачастую многие багхантеры, участвующие в программах Bug Bounty ограничиваются своими "коронными" фишками, и не исследуют что-то другое, либо наоборот, ставят под сканеры все подряд в надежде уловить хоть что-то. Это дает разноплановый, но не полный подход к тестированию. Также, огромное количество фолс срабатываний сканеров может завалить команду разработчиков ненужной работой (это и дополнительные проверки и отклики по каждому репорту — которых может быть очень много).
Открытые программы
Большинство компаний представлено на площадках — агрегаторах, таких как HackerOne или BugCrowd.
Многие российские компании открыли как собственные программы, так и профили на HackerOne. Среди них такие компании, как: Яндекс, Майл.ру, QiWi, Вконтакте и многие другие. Да что говорить, если даже у Пентагона есть своя программа Bug Bounty. (Взломать Пентагон, получить деньги и остаться на свободе — похоже на мечту хакера, но уже суровая реальность).
Средняя сумма выплат составляет от $200 до $1000, в зависимости от уязвимости и места ее нахождения.
Вот, например, оценка стоимости обнаруженных уязвимостей в программе "Охота за ошибками" — Яндекс:
- A01. Инъекции 170000 руб. (критичные сервисы); 43000 руб. (прочие сервисы).
- A02. Межсайтовый скриптинг – A05. Межсайтовая подделка запросов 17000 руб. (критичные сервисы); 8500 руб. (прочие сервисы).
- A06. Ошибки конфигурации веб-окружения – A10. Открытое перенаправление 8500 руб.(критичные сервисы); 5500 руб. (прочие сервисы).
Наиболее «дорогие ошибки»
За время проведения Bug Bounty программ многие компании суммарно выплатили суммы в $ с 5 и более нулями (только Фейсбук выплатил более $5.000.000 вознаграждений), однако были и вознаграждения, которые сами по себе были довольно внушительными. Что самое интересное — баги были космического масштаба, но находились они иногда чуть-ли не методом тыка:
Выявление известной уязвимости:
Россиянин обнаружил в программном обеспечении соцсети ошибку, которая с помощью специальной картинки позволяла запускать на ее серверах произвольный код. Для этого необходимо было воспользоваться уязвимостью в сервисе ImageMagick, предназначенном для быстрого масштабирования и конвертации изображений в новостной ленте Facebook, сообщает Лента.ру. Леонов случайно наткнулся на ошибку во время тестирования стороннего сервиса, изучил ее и представил всю необходимую информацию техническим службам Facebook, которые устранили уязвимость в ноябре 2016 года. В итоге соцсеть выплатила хакеру вознаграждение в 40 тысяч долларов. В 2014 году рекордную сумму в 33,5 тысяч долларов получил от Facebook специалист по кибербезопасности Реджинальдо Сильва.
Или эпохальный взлом Facebook и обнаружение бэкдора в системе, которые принесли исследователю $10.000: Как я взломал Facebook и обнаружил чужой бэкдор.
Как правильно составлять баг-репорты
Правила оформления записей в баг-трекере в каждой компании свои — это зависит как от политики компании, технологии разработки, используемного баг-трекера, типа проекта и много чего еще. Но в любом случае хороший баг-репорт обладает определенными характеристиками.
Если кратко, то хороший баг-репорт позволяет:
1. воспроизвести проблему (это не всегда возможно, но надо стремиться).
2. понять, в чем проблема и какова ее важность.
Как написать хороший баг-репорт?
Для начала надо подготовиться. Если вы обнаружили баг, не стоит моментально бежать в баг-трекер и писать «ничего не работает!». Воспроизведите ошибку. Воспроизвелась? Отлично. Не воспроизвелась? Значит, что-то вы не учли. Вспоминайте, что делали.
Снова воспроизвелась? Ура! А теперь минимизируйте количество шагов для воспроизведения, удостоверьтесь, что нет ничего лишнего.
Если используются какие-то входные данные, удостоверьтесь, что и они не содержат лишнего (действительно ли весь этот здоровенный кусок текста роняет редактор, а не один символ из него?).
Когда вы поняли, какие именно данные и какие ваши действия приводят к проблеме, кратко сформулируйте ее суть — придумайте заголовок баг-репорта. Опишите проблему настолько подробно и конкретно, насколько позволяет заголовок, при этом не увлекаясь его длиной :)
Пример плохого заголовка: «Все виснет, когда я вставляю текст из буфера обмена»
Пример «более хорошего» заголовка: «Редактор зависает при вставке текста, содержащего символ N, из буфера обмена по Ctrl+V»
Allenary: Можно еще упомянуть принцип «Что? Где? Когда?». В большинстве случаев это помогает написать удачный заголовок/подробное описание, Например,
Что: неправильный расчет данных
Где: на странице NNN
Когда: после ввода а поле Y отрицательного значения.
Старайтесь не писать фразы типа «я кликаю на ссылку», «я нажимаю кнопку» и им подобные. И заголовок, и описания шагов — это руководство к действию для тех, кто будет исправлять проблему, поэтому лучше формулировать как «кликнуть на ссылку», «нажать на кнопку».
Теперь откройте баг-трекер, начните заполнять форму баг-репорта.
Запишите заголовок.
В каких-то баг-трекерах поля «Подробное описание» и «Шаги для воспроизведения» различаются, в каких-то — нет.
Если поле «Подробное описание» есть, опишите в нем проблему более подробно — уточните те детали, которые пришлось опустить в заголовке. Если вы понимаете, в чем причина проблемы (используется устаревшая формула для расчетов, не учитывается какое-то значение и т.д.) — тоже пишите все здесь. Если не знаете — лучше не гадайте.
Если в форме записи об ошибке нет отдельного поля Affect version (версия продукта, в котором проявляется проблема), то укажите версию здесь.
«Шаги для воспроизведения» — основное поле для заполнения в баг-репорте.
Запишите шаги, которые вы определили. Как уже было сказано, шагов должно быть необходимо и достаточно для воспроизведения проблемы. Лишние не пишите. Необходимых тоже не пропускайте :)
После описания шагов обязательно напишите результат — что получилось.
Далее здесь же опишите ожидаемый результат, если это необходимо. Конечно, не стоит писать «Редактор не падает», но если, например, результаты расчетов не соответствуют ожидаемым, то это надо указывать.
Таким образом, описание шагов для воспроизведения должно выглядеть как-то так:
Шаги для воспроизведения:
1. Открыть…
2. Кликнуть…
3. Ввести в поле… значение N1
4. Ввести в поле… значение N2
4. Кликнуть кнопку Calculate
Результат:
В поле Result отображается V1.
Ожидаемый результат:
В поле Result отображается V2.
Если требуются исходные файлы, данные, дампы и пр. — сразу приаттачьте. Само собой, файлы должны содержать только информацию, необходимую для воспроизведения ошибки. Подчистите все лишнее.
Если проблема с визуальным отображением, то скриншот обязателен — можно будет понять ошибку и без воспроизведения шагов. Khizhnyak: На скриншотах лучше указывать место с ошибкой. Стрелочкой или просто полосой контрастного цвета. Здорово ускоряет «чтение» скриншота.
Но вставлять скриншоты в каждый баг-репорт совершенно не обязательно: пожалуйста, не плодите лишних сущностей. Если он ничем не поможет в воспроизведении проблемы — не тратьте время на его изготовление.
Кстати, про видео воспроизведения ошибки: оно может помочь разве что для подтверждения, что проблема действительно есть, просто воспроизвести ее сложно. Но часто ли вы делаете запись экрана заранее? :)
По остальным полям.
Severity, Priority.
Наличие этих полей и значения в этих полях отличаются от багтрекера к багтрекеру.
Severity — это критичность бага с точки зрения тестировщика: фича, опечатка в тексте, мелкая проблема, значительная проблема, падение продукта, блокирующая проблема и пр.
Priority — приоритет, с которым проблема должна быть исправлена.
Если есть оба поля, то тестировщик, как правило, выставляет только Severity, а Priority — старший тестировщик/старший программист/менеджер или любой другой ответственный за это дело человек.
Если есть только одно поле, то выставляем его.
«Какой приоритет ставить багу?» На этот вопрос нет однозначного ответа, все зависит от каждого конкретного случая. Но старайтесь не увлекаться и не ставить всем багам подряд высокий или критичный приоритет, реально оценивайте их критичность для проекта.
Наиболее «дорогие ошибки»
За время проведения Bug Bounty программ многие компании суммарно выплатили суммы в $ с 5 и более нулями (только Фейсбук выплатил более $5.000.000 вознаграждений), однако были и вознаграждения, которые сами по себе были довольно внушительными. Что самое интересное — баги были космического масштаба, но находились они иногда чуть-ли не методом тыка:
Выявление известной уязвимости:
Россиянин обнаружил в программном обеспечении соцсети ошибку, которая с помощью специальной картинки позволяла запускать на ее серверах произвольный код. Для этого необходимо было воспользоваться уязвимостью в сервисе ImageMagick, предназначенном для быстрого масштабирования и конвертации изображений в новостной ленте Facebook, сообщает Лента.ру. Леонов случайно наткнулся на ошибку во время тестирования стороннего сервиса, изучил ее и представил всю необходимую информацию техническим службам Facebook, которые устранили уязвимость в ноябре 2016 года. В итоге соцсеть выплатила хакеру вознаграждение в 40 тысяч долларов. В 2014 году рекордную сумму в 33,5 тысяч долларов получил от Facebook специалист по кибербезопасности Реджинальдо Сильва.
Или эпохальный взлом Facebook и обнаружение бэкдора в системе, которые принесли исследователю $10.000: Как я взломал Facebook и обнаружил чужой бэкдор.
Bug Bounty: заработай на чужих ошибках
В этой статье я расскажу о Bug Bounty программах, их плюсах и минусах, а также как на этом зарабатывают.
В первую очередь давайте определим что такое Bug Bounty: программа выплата награды за обнаружение проблем в безопасности сервисов и приложений компании. На русский язык уместнее всего это переводится как "Охота за ошибками".
Т.е. это некий свод правил "взаимодействия" с информационными ресурсами компании. Обычно в него входит регламент проведения программы, перечень ресурсов, описание принимаемых уязвимостей, размеры вознаграждения. В классическом исполнении это описание того, что можно "ломать" и сколько багхантер получит за ту или иную уязвимость.
Так выглядит Bug Bounty снаружи. Что это дает компании? В первую очередь непрерывный процесс "проверки на прочность": специалисты с различным уровнем знаний, инструментарием и часовыми поясами в режиме нон-стоп атакуют ресурсы компании. Со стороны компании задействованы ресурсы на:
- мониторинг систем;
- реагирование и обработка репортов;
- баг-фиксинг (быстры или не очень).
Хочу участвовать, что надо делать?
Для тех, кто решил попробовать свои силы и возможности в поиске ошибок могу посоветовать несколько основных этапов, которые приведут к победе:
Следите за новостями. Обновился скоп программы — бегом проверять новые сервисы. Производитель добавил новый функционал, расширил старый или интегрировал сторонний сервис? — большая возможность, особенно в сложной инфраструктуре допустить ошибку.
Упорство. Скрупулезное исследование, не упускать никаких деталей. Хорошая практика будет периодически сравнивать результаты прошлых проверок с текущем состоянием системы.
Поиск. Ищите и обрящете. Большинство крупных багов находят на "не публичных" поддоменах и директориях. Здесь вам пригодятся инструменты по выявлению поддоменов и хорошие листы словарей для брута директорий и поддоменов.
Исследование. Отложите автоматические сканеры, просеивайте веб-приложение (а большинство Bug Bounty связано именно с вебом) как песок сквозь сито для поиска крупинок золота. Здесь я рекомендую использовать Burp Suite или Owasp Zap — лучше инструментов нет. Почти все крупные победы в баутни — результат работы с этими инструментами (практически на любом публичном репорте можно это увидеть).
Исследуйте. Скачайте приложение для локального исследования, если это возможно. Читайте отчеты других участников — это может дать пищу для ума. Тот же взлом фейсбука — многие российские багхантеры видели этот поддомен, даже пытались с ним что-то делать — но "не докрутили". Хорошим подспорьем для этого будет ресурс: The unofficial HackerOne disclosure Timeline
Bag Berry / Рюкзак
Ранец для школьников с анатомической спинкой Bag Berry - это гордость нашего производства. Ранец изготовлен в России. Рюкзак предназначен для школьников 2-4 класса. Передняя крышка и боковины портфеля изготовлены методом горячего формования современного материала EVA - экологически чистого вспененного каучука. За счет этого рюкзак хорошо держит форму, устойчив к влаге и не теряет форму. Яркий дизайн нанесен на крышку ранца безопасными красками на водной основе. Спинка рюкзака продумана до мелочей для комфорта вашего ребенка. Мягкие съёмные лямки регулируются по высоте для равномерного распределения нагрузки. Рюкзак имеет одно большое отделение с двумя гибкими перегородками под книжки, альбомы и тетради. Небольшое отделение за передней крышкой с кармашком-сеточкой предназначено для мелочей. Размер рюкзака 38*29*20 см.
Вид застежки | молния |
---|---|
Рисунок | сюжетный |
Карманы | внутри на молнии |
Материал подкладки | полиэстер |
Назначение рюкзака | в школу; универсальное; на занятия |
Повод | день рождения; 1 сентября; без повода) |
Особенности рюкзака | анатомическая спинка |
Вес товара без упаковки (г) | 830 г |
Вместимость рюкзака | 20 л |
Высота предмета | 38 см |
Глубина предмета | 20 см |
Ширина предмета | 29 см |
Ширина упаковки | 10 см |
Высота упаковки | 10 см |
Глубина упаковки | 5 см |
Размер рюкзака | 15-20 литров (средний) |
Количество лямок | 2 |
Направление | студентам; школьникам; дошкольникам |
Страна производства | Россия |
Комплектация | рюкзак |
Пол | Мальчики |
Количество отделений | 2 шт. |
Информация о технических характеристиках, комплекте поставки, стране изготовления и внешнем виде товара носит справочный характер и основывается на последних доступных сведениях от продавца
Читайте также: