Hello!

最近我们公司的CEO在电视采访中抨击了基努·里维斯,之后出现的情况是,看起来很多粉丝都喜欢他,甚至是我们公司内部的某些员工也喜欢…
从那以后, 就开始在我们的AWS账号里发生一些十分奇怪的事情。主要的,是以下三件事情:
1)我们的数据库每天都会随机突然的流量增加,CPU/内存飙升,并且我们查看日志之后发现这些流量都不是从我们的webserver过来的。 这以前从来没有发生过。请解决这个问题,拒绝这些非法连接。
查看VPC安全组的入站规则,删除source是0.0.0.0/0的rule。
更进一步的做法是,VPC的子网应该改成private:修改route table,igw改成nat gateway。

2)看起来有人一直在从S3里删除我们网站的.css 并且我们的图片文件background image 也不知所踪 ,导致我们的网站看起来无格式并且没有图片。请将这两个文件放回我们的S3桶,从而让我们的网站看起来正常。 对于网站的相关信息比如DNS。请查看账户下ALB的的DNS地址。
可以在ALB看到DNS,然后访问这个DNS,就可以访问这个网页,但是样式不对。
增加S3的存储桶的Policy,一定要有Deny删除的Policy,不能只有Allow read。

  1. {
  2. "Version": "2012-10-17",
  3. "Statement": [
  4. {
  5. "Sid": "PublicRead",
  6. "Effect": "Allow",
  7. "Principal": "*",
  8. "Action": [
  9. "s3:GetObject",
  10. "s3:GetObjectVersion"
  11. ],
  12. "Resource": "arn:aws:s3:::ctfbucket-204639178607/*"
  13. },
  14. {
  15. "Sid": "Stmt1608186665649",
  16. "Effect": "Deny",
  17. "Principal": "*",
  18. "Action": "s3:DeleteObject",
  19. "Resource": "arn:aws:s3:::ctfbucket-204639178607/*"
  20. }
  21. ]
  22. }

3)我们最近后端应用发现有大量的奇怪请求发送到web服务器上(类似于这种 - /Users.php?uid=1%20or%201=1) 。我们觉得这可能是为什么一些用户反映最近他们的账户出现了一些奇怪的事情。
我们的account下有一个ALB,在那里你可以找到我们主页的DNS名称。你也可以尝试使用一些查询加在”/Users.php?uid=”这样的URI之后来看在我们数据库里的不同用户的unicorn信息。
原因是SQLInjection。
可以在上一步那个DNS后加 /Users.php?uid=1%20or%201=1 。
AWS有提供一个WAF服务,在WAF创建一个Web ACL。
rules选AWS自带的 AWS-AWSManagedRulesSQLiRuleSet的 。
Associated AWS resources选 你的ALB。

请尝试解决这个问题,前提是请不要导致网站宕机! 请注意停止数据库,或者拒绝webserver访问数据库都会导致网站宕机而不能得分。并且你不需要对网站的代码进行变更来解决问题。另外,由于最近的这些安全问题,我们已经关闭了不必要的权限,如果你遇到了权限问题,这并不是错误,请找到另外的方法来解决问题。
如果你解决了我们的这些问题,你会被给予很多奖励
在本次gameday中-当然是大量的分数奖励 :

附加题:
1)查找是哪个IP在试图connect你的RDS。
VPC的flow log + cloudwatch。
被安全组挡掉的都会记VPC flow log。
VPC的flow log会记录所有的对这个VPC进行访问的信息,默认格式是

  1. ${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action} ${log-status}

步骤:
在cloudwatch创建日志组。
在VPC的flow log创建一个流日志:筛选条件选Reject,输出到你刚刚创建的cloudwatch日志组,间隔时间选1分钟,会快一些生成日志。
去cloudwatch的insight,使用filter查看。
image.png
image.png

2)查看哪个AWS account id是你不能信任的。
查找在s3 deleteObject的account。
cloudtrail + Athena。
CloudTrail对S3的查询只能是bucket级别,不能是object级别。所以要创建Athena表。
然后去Athena查询。
image.png
image.png
image.png
在Athena进行query,发现是BigBrother删除的,但是account id是我们自己的ID,所以肯定是有给这个人赋权的操作。可以查这个时间之前的记录。

image.png
image.png
找到这个操作对应的useridentity。
会发现有一个lambda定时去给Bigbrother赋900s的临时opsRule的权限。
BigBrother是section name,是其他account assume进来的。
image.png
image.png
也可以通过OpsRole到IAM找信任关系,必然是这里面的一个account assume过去的。
image.png

3)查找对你的website进行SQL注入的用户的名字。
WAF的log。
image.png
image.png
此处可以看到neo-anderson。其实此处的ip就是试图连接RDS的ip,即第一题答案。