Подозреваемый вызов loadByUsername на AWS - PullRequest
0 голосов
/ 06 мая 2019

У меня приложение Spring Boot, развернутое на ElasticBeanstalk. Я собираюсь начать бета-тестирование, поэтому пока еще не так много людей, которые знают URL приложения. Вчера я обнаружил в файле журнала, что кто-то вызвал метод loadByUsername из моей реализации UserDetailsService. Дело в том, что в это время нет другого журнала. Если этот пользователь попытается войти в систему, я найду информацию о вызове метода входа и Authentication Success/Fail Handler. Поэтому я предполагаю, что этот пользователь использовал какую-то уязвимость Spring или Tomcat. Итак, есть 2 вопроса:

  1. как это возможно, что кто-то угадал мой URL (URL-адрес домена или CloudFront)? Люди используют ботов для сканирования URL CloudFront методом грубой силы?
  2. как этот человек вызвал метод loadByUsername без вызова обработчиков аутентификации? Есть ли известная уязвимость в Spring? Или кто-то ввел какую-то вредоносную программу? Как это защитить?

Я использую Spring Boot 1.5.8. Я думаю, что хорошо упомянуть, что пару дней назад я обнаружил в журналах, что кто-то пытался назвать некоторые универсальные имена, такие как phpMyAdmin, / api / admin, wp-admin и так далее. И во всех случаях сервер вернул 404.

public class UserDetailsManager implements UserDetailsService  {

    @Autowired
    private static final Logger LOG;

    @Autowired
    private UserDao userDao;

    @Override
    public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException {
        LOG.debug("Load by username: {}", login);
        return userDao.getByLogin(login).map(user -> new CustomUser(user.getUsername(), user.getPassword()))
                .orElseThrow(() -> new UsernameNotFoundException("User not found for login " + login));
    }

}

редактировать : Я обнаружил, что если пользователь не использует Spring Security / enpoint входа для аутентификации, но вызывает любой защищенный URL с базовой аутентификацией, Spring пропускает обработчики аутентификации. Вот почему не было никаких других журналов. В логах nginx я нашел звонок с этого User-Agent: https://github.com/robertdavidgraham/masscan. Итак, теперь единственный вопрос, как некоторые случайные люди знают о моем сайте? Есть ли реестр недавно созданных URL-адресов Cloudfront?

1 Ответ

1 голос
/ 06 мая 2019

Так что теперь единственный вопрос, как некоторые случайные люди знают о моем сайте? Есть ли реестр недавно созданных URL-адресов Cloudfront?

Нет, но диапазоны адресов, используемые Amazon, хорошо известны, и если бы вы пошли в проект GitHub, идентифицированный пользовательским агентом, вы увидите следующее:

Сканер TCP-порта, асинхронно извергает пакеты SYN, сканируя весь Интернет менее чем за 5 минут.

Другими словами, какой-то сценарий детишка прощупывает ваш сайт.

Ваш реальный вопрос должен звучать так: «Какой контроллер на моем сайте назвал этот сервисный метод и какой URL вызвал этот контроллер?» Но это то, что только вы можете ответить, потому что только вы знаете структуру вашего сайта.

Однако есть еще одна вещь:

Я выяснил, что если пользователь не использует Spring Security / имя входа для проверки подлинности, но вызывает любой защищенный URL с базовой аутентификацией, Spring пропускает обработчики проверки подлинности.

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

...