【发布时间】:2019-09-24 00:10:13
【问题描述】:
我在 ElasticBeanstalk 上部署了 Spring Boot 应用程序。我即将开始beta测试,所以还没有那么多人知道应用程序的url。昨天我在日志文件中发现有人从我的UserDetailsService 实现中调用了loadByUsername 方法。关键是此时没有任何其他日志。如果该用户尝试登录,我会找到有关登录方法调用和Authentication Success/Fail Handler 的信息。所以我假设这个用户使用了一些 Spring 或 Tomcat 漏洞。所以有2个问题:
- 怎么可能有人猜到了我的 url(域或 CloudFront url)? pople 是否使用机器人通过蛮力方法扫描 CloudFront url?
- 这个人如何在不调用身份验证处理程序的情况下调用 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 /login enpoint 进行身份验证,而是使用基本身份验证调用任何受保护的 url,Spring 会忽略身份验证处理程序。这就是为什么没有任何其他日志的原因。
在 nginx 日志中,我发现来自此 User-Agent:https://github.com/robertdavidgraham/masscan 的调用。所以现在唯一的问题是一些随机的人是如何知道我的网站的?是否有新创建的 Cloudfront url 的注册表?
【问题讨论】:
-
“我假设这个用户使用了一些 Spring 或 Tomcat 漏洞”:可能,但是太小了,你应该先看看你自己的代码。
-
如果您有访问日志,您应该能够将对该服务方法的调用与发出调用的用户的 IP 地址相关联。
-
我发现了这个应用程序行为的原因(在后期编辑中)。我从日志中知道该用户的 IP。但是我能用这些知识做什么呢?
标签: amazon-web-services spring-boot security amazon-cloudfront amazon-elastic-beanstalk