Взлом сайта: простые советы по безопасности / Хабр

Что имеем в итоге

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

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

По данным PublicWWW более 17 000 сайтов используют данный фреймворк.

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

Хронология событий:

8 августа, 22:30 – купил футболку9 августа, 08:00 – сообщил об уязвимости Webasyst, прикрепил видео с Proof of Concept9 августа, 13:00 – получил подтверждение от службы поддержки14 августа – получил вознаграждение, уязвимость была закрыта11 сентября – получил добро на публикацию данной статьи

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

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

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

Разберем пошаговую инструкцию ваших действий, при обнаружении взлома:

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

Взлом – взломать сайт за 60 секунд | geekbrains – образовательный портал

Прочел в интернете статью про взлом сайтов, sql injection и разные хакерские способы залезть в данные через интернет-страницу. Вроде даже существует специальная программа для поиска SQL уязвимостей (или даже множество таких программ), которая выполняет автоматический поиск sql уязвимостей на любом сайте и потом сливает всю инфу хакеру. И есть, как пишут, куча пособий для хакеров, как найти сайты с sql уязвимостью, и как взламывать сайты sql.
Я сам не хакер, и мне не сильно интересно, как взломать сайт через sql. Мне интересно, как можно предотвратить такой взлом сайтов через SQL. Что конкретно нужно делать, чтобы минимизировать риск взлома?

Зачем взламывают сайты

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

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

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

Изучаем исходники

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

wa-system/contact/waContact.class.php

Функция save($data, $validate) — осторожно, много кода!

/**
 * Saves contact's data to database.
 *
 * @param array $data Associative array of contact property values.
 * @param bool $validate Flag requiring to validate property values. Defaults to false.
 * @return int|array Zero, if saved successfully, or array of error messages otherwise
 */
public function save($data = array(), $validate = false)
{
    $add = array();
    foreach ($data as $key => $value) {
        if (strpos($key, '.')) {
            $key_parts = explode('.', $key);
            $f = waContactFields::get($key_parts[0]);
            if ($f) {
                $key = $key_parts[0];
                if ($key_parts[1] && $f->isExt()) {
                    // add next field
                    $add[$key] = true;
                    if (is_array($value)) {
                        if (!isset($value['value'])) {
                            $value = array('ext' => $key_parts[1], 'value' => $value);
                        }
                    } else {
                        $value = array('ext' => $key_parts[1], 'value' => $value);
                    }
                }
            }
        } else {
            $f = waContactFields::get($key);
        }
        if ($f) {
            $this->data[$key] = $f->set($this, $value, array(), isset($add[$key]) ? true : false);
        } else {
            if ($key == 'password') {
                $value = self::getPasswordHash($value);
            }
            $this->data[$key] = $value;
        }
    }
    $this->data['name'] = $this->get('name');
    $this->data['firstname'] = $this->get('firstname');
    $this->data['is_company'] = $this->get('is_company');
    if ($this->id && isset($this->data['is_user'])) {
        $c = new waContact($this->id);
        $is_user = $c['is_user'];
        $log_model = new waLogModel();
        if ($this->data['is_user'] == '-1' && $is_user != '-1') {
            $log_model->add('access_disable', null, $this->id, wa()->getUser()->getId());
        } else if ($this->data['is_user'] != '-1' && $is_user == '-1') {
            $log_model->add('access_enable', null, $this->id, wa()->getUser()->getId());
        }
    }

    $save = array();
    $errors = array();
    $contact_model = new waContactModel();
    foreach ($this->data as $field => $value) {
        if ($field == 'login') {
            $f = new waContactStringField('login', _ws('Login'), array('unique' => true, 'storage' => 'info'));
        } else {
            $f = waContactFields::get($field, $this['is_company'] ? 'company' : 'person');
        }
        if ($f) {
            if ($f->isMulti() && !is_array($value)) {
                $value = array($value);
            }
            if ($f->isMulti()) {
                foreach ($value as &$val) {
                    if (is_string($val)) {
                        $val = trim($val);
                    } else if (isset($val['value']) && is_string($val['value'])) {
                        $val['value'] = trim($val['value']);
                    } else if ($f instanceof waContactCompositeField && isset($val['data']) && is_array($val['data'])) {
                        foreach ($val['data'] as &$v) {
                            if (is_string($v)) {
                                $v = trim($v);
                            }
                        }
                        unset($v);
                    }
                }
                unset($val);
            } else {
                if (is_string($value)) {
                    $value = trim($value);
                } else if (isset($value['value']) && is_string($value['value'])) {
                    $value['value'] = trim($value['value']);
                } else if ($f instanceof waContactCompositeField && isset($value['data']) && is_array($value['data'])) {
                    foreach ($value['data'] as &$v) {
                        if (is_string($v)) {
                            $v = trim($v);
                        }
                    }
                    unset($v);
                }
            }
            if ($validate !== 42) { // this deep dark magic is used when merging contacts
                if ($validate) {
                    if ($e = $f->validate($value, $this->id)) {
                        $errors[$f->getId()] = $e;
                    }
                } elseif ($f->isUnique()) { // validate unique
                    if ($e = $f->validateUnique($value, $this->id)) {
                        $errors[$f->getId()] = $e;
                    }
                }
            }
            if (!$errors && $f->getStorage()) {
                $save[$f->getStorage()->getType()][$field] = $f->prepareSave($value, $this);
            }
        } elseif ($contact_model->fieldExists($field)) {
            $save['waContactInfoStorage'][$field] = $value;
        } else {
            $save['waContactDataStorage'][$field] = $value;
        }
    }

    // Returns errors
    if ($errors) {
        return $errors;
    }

    $is_add = false;
    // Saving to all storages
    try {
        if (!$this->id) {
            $is_add = true;
            $storage = 'waContactInfoStorage';

            if (wa()->getEnv() == 'frontend') {
                if ($ref = waRequest::cookie('referer')) {
                    $save['waContactDataStorage']['referer'] = $ref;
                    $save['waContactDataStorage']['referer_host'] = parse_url($ref, PHP_URL_HOST);
                }
                if ($utm = waRequest::cookie('utm')) {
                    $utm = json_decode($utm, true);
                    if ($utm && is_array($utm)) {
                        foreach ($utm as $k => $v) {
                            $save['waContactDataStorage']['utm_'.$k] = $v;
                        }
                    }
                }
            }

            $this->id = waContactFields::getStorage($storage)->set($this, $save[$storage]);
            unset($save[$storage]);
        }
        foreach ($save as $storage => $storage_data) {
            waContactFields::getStorage($storage)->set($this, $storage_data);
        }
        $this->data = array();
        $this->removeCache();
        $this->clearDisabledFields();
        wa()->event(array('contacts', 'save'), $this);

    } catch (Exception $e) {
        // remove created contact
        if ($is_add && $this->id) {
            $this->delete();
            $this->id = null;
        }
        $errors['name'][] = $e->getMessage();
    }
    return $errors ? $errors : 0;
}


Параметр $data содержит данные в формате

‘название поля’ => ‘значение поля’

, в функции я не заметил защиты от

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

Установив на локалку движок, первым делом я решил посмотреть структуру таблицы `wa_contact`.

Как защитить сайт от взлома

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

  • Устанавливайте хорошие антивирусы. Самая распространенная причина взлома — вирусное ПО на компьютере администратора.
  • Придумывайте сложные пароли для панели администрирования, FTP-клиента. Чем он проще, тем выше вероятность, что злоумышленник пароль просто подберет.
  • Регулярно обновляйте CMS. Никто не застрахован от уязвимостей. Следите за актуальностью версии CMS, чтобы хакер не смог воспользоваться уязвимостями системы.
  • Размещайте один сайт на хостинге. Взломав один ресурс, мошенник получит доступ и к остальным порталам, использующим этот же аккаунт для FTP.

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

Как можно получить доступ к управлению самим сервером?

Приведу один распространённый пример для Linux-систем. Аналогично, сначала необходим доступ на площадку одного сайта.


Есть несколько уязвимостей в ядре через нулевой указатель, которым подвержены десятки Linux-систем, например:

. Там же описаны и эксплоиты

(осторожнее, это работает!)

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


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

Обсуждение по этому вопросу велось и

Ответственность за защиту от данных эксплоитов лежит на администраторе сервера.

Последовательность действий по устранению последствий

«Лечения» восстановлением из бекапа недостаточно, один раз взломав сайт, к Вам ещё вернутся. Что же делать владельцу сайта?

Преступление и наказание


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

Отделом К города N возбуждено уголовное дело по ст.272 УК РФ «Неправомерный доступ к охраняемой законом компьютерной информации…» в отношении гражданина РФ по заявлению юридического лица (владельца сайта). В феврале 2020-го года был выполнен взлом сайта производства одной из российских дизайн-студий («самописный» скрипт), через найденную злоумышленником уязвимость в коде сайта.

Целью взлома являлось размещение рекламных баннеров. Злоумышленник принёс свои письменные извинения владельцу сайта с просьбой досудебного урегулирования — кроме уголовной статьи ему грозит и отчисление из ВУЗа. Так сказать — в интересах следствия подробности не разглашаются.

Если ущерб значительный, а IP-адрес «местный» (даже динамический и принадлежит Интернет-провайдеру), а не «китайского прокси» — можно с заявлением и имеющимися материалами обратиться по месту жительства в правоохранительные органы, а конкретно в отдел К.

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

Тестируем

Добавляем товар в корзину, переходим на страницу оформления заказа, заполняем стандартные поля… и самое время добавить новые:

Отправляем запрос, пробуем зайти с нашими данными в админку (/wa/webasyst/). Авторизация проходит успешно, но… страница админки совершенно пустая: у нас нет никаких прав. Судорожно ищу поле в таблице, отвечающее за права доступа и понимаю, что такого поля нет, а все права как и подобает вынесены в отдельную таблицу.

Я уже почти смирился с фиаско, пока не заметил, что таблица `wa_contact_rights` содержит права для пользователей по id и для групп по id со знаком минус. В голову сразу же пришла идея присвоить нашему пользователю отрицательный id, тем самым получив права группы.

Фокус от хакеров. как легко взламывают интернет-банки россиян

По данным Центробанка, доля пользователей онлайн-приложений кредитных организаций увеличилась с 31,5% в 2020 году до 45,1% в 2020-м. Личный кабинет на сайте банка позволяет совершать платежи и переводы, открывать вклады и оставлять заявки на кредиты дистанционно — без посещения отделений. Впрочем, при работе с онлайн-приложением кредитной организации нужно быть начеку: взломы интернет-банков являются одним из векторов атак хакеров. Ущерб от их действий снизился: в 2020 году, по данным ЦБ, они украли у россиян 76,5 млн рублей, тогда как годом ранее — 1,08 млрд. Но несмотря на снижение потерь от действий кибермошенников, клиентам банков уже стоит подготовиться к следующему году: специалисты по кибербезопасности ожидают увеличения активности злоумышленников.

Количество атак с целью хищения средств у россиян будет расти, считает директор департамента информационной безопасности банка “Открытие” Владимир Журавлёв. По его словам, это связано с увеличением числа клиентов, которые пользуются дистанционными сервисами: как банковскими, так и другими (госуслуги, интернет-магазины, заказы билетов, школьные порталы). Особенно мошенники активизируются с 30 декабря по 8 января, когда бдительность пользователей усыплена, отметили в компании Attack Killer.

— Любые большие праздники или крупные события — Новый год, чёрная пятница или, допустим, чемпионат мира по футболу сопровождают всплески преступности в Интернете, — констатировал замруководителя лаборатории компьютерной криминалистики Group-IB Сергей Никитин. — Хакеры используют любые способы, чтобы заработать. К сожалению, большинство пользователей становятся их жертвами из-за собственной невнимательности и халатности.

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

Основной вектор атак хакеров связан с фишингом, отметил Сергей Никитин. При нём на электронную почту жертвы приходит письмо со ссылкой, которая имитирует интерфейс кредитной организации. Часто подобные ссылки публикуются на различных форумах. Если клиент переходит по ним, у него выманивают логин-пароль для входа в онлайн-кабинет на сайте банка. По данным Group-IB, ущерб от фишинга во втором полугодии 2020-го — первом полугодии 2020-го составил 250,9 млн рублей. При этом ежедневно фиксируется примерно 1274 подобных атак, констатировал Сергей Никитин.

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

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

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

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

Чтобы не стать жертвой этого способа атак, в Positive Technologies рекомендуют устанавливать и регулярно обновлять антивирусы.

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

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

Также хакер может попросить вас сгенерить якобы тестовые транзакции в личном кабинете, после чего средства уйдут со счёта. На протяжении первой половины 2020 года доля атак с помощью социальной инженерии составляла около 30%, указали в Positive Technologies.

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

Кроме того, кибермошенники могут устроить DDOS-атаку на ваш интернет-банк, чтобы скрыть уже совершённые хищения, отметила управляющий партнёр аудиторской компании 2К Тамара Касьянова. Если вы не можете зайти в онлайн-приложение, постарайтесь проверить состояние счёта другим способом — например, обратитесь в банк, советует Тамара Касьянова. Возможно, злоумышленники уже увели деньги и с помощью DDOS-атаки заметали следы, пояснила она.

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

Необходимо обращать внимание на название кредитной организации и её сайт, когда вы вводите её адрес в браузере, добавил он. Даже одна ошибка в символе может привести вас на ресурс мошенников, констатировал Антон Граборов. По его словам, дополнительно необходимо установить лимиты на переводы между счетами: это спасёт от потери всех средств в случае взлома личного кабинета. Самый простой и удобный способ контролировать всё, что происходит с вашими финансами, — подключить СМС-оповещение или push-уведомления, чтобы информация обо всех транзакциях приходила на телефон, позволяя всегда держать руку на пульсе.

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

Краткие выводы


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

Тривиальные советы владельцу сайта:

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

PS: статья не претендует на абсолютную полноту изложения и ориентирована не на IT-гуру, разумеется, при целенаправленном взломе конкретного сервера или сайта могут применяться другие средства. Рад буду дополнить по комментариям хабрасообщества, в том числе и другими примерами.И вкратце о действиях при взломе сайта.

Похожее:  требуется авторизация в Wi Fi сети на телефоне что делать ростелеком

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *