changed 6 years ago
Linked with GitHub

網站應用程式安全 王凱慶

tags: 筆記 ais3 2019

服務探索

弱點掃描

  • 主機弱掃
    • Nessus
    • nexpose
    • OpenVAS
  • 網頁弱掃
    • Acunetix
    • AppScan
    • WebInspect

弱點驗證

  • 是否為誤判
  • 評估衝擊

EC2

這個session講者主要講EC2的細節和可能的問題,雲端和一般主機有相同風險,但除了這些之外,還可能有來源疑慮(AMI Market),以及雲端環境與一般環境不同的機制。

AMI - Amazon Machine Image
AMI 封裝方式:主系統(加密)、儲存區

雲端主機部署通常是大量的,那要怎麼設定主機?EC2是在每個instance上跑cloud-init從metadata service獲取設定並設定該主機。而metadata service就可能給入侵者透露某些重要資訊。眾多雲端服務提供商皆是以此種形式設定Instance

  • Metadata Service
    • hostname, host-ID, host IP
    • Network Information
    • SSH public key
    • startup script
    • Security Credentials

如果要存取Metadata Service,通常要在該容器裡存取某特定IP位置,以獲取metadata:

  • AWS/GCP/Azure/Digital Ocean/Helion/Open Stack
    • 169.254.169.254
  • Oracle
    • 192.0.0.192
  • Alibaba
    • 100.100.100.200

除了GCP之外,其他的存取方式都差不多

  • http://169.254.169.254/latest/meta-data/
  • http://169.254.169.254/latest/user-data
  • http://169.254.169.254/latest/meta-data/iam/security-credentials/
  • http://169.254.169.254/latest/meta-data/identity-credentials/

GCP存取metadata要設定header,感覺稍微增加了一點複雜度(?

設定headerX-Google-Metadata-Request: True訪問http://169.254.169.254/computeMetadata/v1/;但奇怪的事竟然存在不用設定header也能訪問的:http://metadata.google.internal/computeMetadata/v1beta1/

從metadata可以拿到特定RoleName的敏感內容:http://169.254.169.254/latest/meta-data/iam/security-credentials/RoleName

上頭的RoleName其實是IAM Role,而IAM(Identity and Access Management)是AWS用於管理服務、資源存取的權限,可以建立使用者、群組來管理存取AWS的權限


可以發現從metadata可以拿到特定role的AccessKeyId, SecretAccessKeyToken,我們的目的就是要拿到metadata中的敏感資料。可以利用以下手法拿取:

  • get shell直接拿
  • command injection (跟上一項差不多)
  • SSRF

SSRF

接下來講者說根據pre-exam的情況,他詳細介紹SSRF的細節:攻擊面、成因。


  • SSRF (Server-Side Request Forgery)
    • 攻擊者構造payload使得服務端發起請求,目的在於存取服務端的內網
    • 攻擊面
      • 探索內部服務(port scan)
      • 攻擊內部服務(struct2, redis, ElasticSearch)
      • 讀取檔案(/etc/passwd)
      • 辨別服務框架/架構(Banner)
    • 什麼地方會有SSRF?
      • 能發起網路請求的地方
      • 呼叫其他服務
      • 請求遠端資源(下載、快取)
      • 服務內建功能(Oracle, MSSQL, CouchDB)
      • 文件處理(ffmpeg, ImageMagick, doc, xlsx, pdf, xml)
      • 其他漏洞利用(command injection, SQLi, XSS, SSTI)
    • 保護繞過
      • 302 redirect
        • Location: scheme://IP:Port/Path
      • IP變形
        • 127.1
        • 127.0x0.0x00.1
        • 2130706433 decimal
        • [::]
        • 0000::1
      • 網域解析
      • DNS rebind
        ​​​<?php
        ​​​$domain='xxx.com'; // 1.1.1.1 (pass)
        ​​​$ip=gethostbyname($domain);
        ​​​if(!in_blacklist($ip)) {
        ​​​    $content=file_getcontents($domain); // 127.0.0.1
        ​​​}
        
      • 解析不一致
        • 不同的url parser可能有不同的行為

接著便有兩題lab題,都是SSRF去拿metadata資料


PACU

拿到了IAM Security Credentials之後,檢查Role的權限,好使用此role去存取別的服務。如果IAM查閱權,則可以直接用API獲得權限表;反之,如果沒有查閱權,則可以遍歷所有API。講者也介紹了一個工具:PACU - AWS exploitation framework,用於exploit AWS的服務。

在使用PACU之前,得先匯入role的資訊到~/.aws/credentials可以直接新建一個檔案,或是使用aws-cli來新建credentails,匯入的key等資訊就填入先前從metadata獲得的資訊即可。

python3 pacu.py打開PACU後,import_keys <profile name>匯入先前設定的credential至PACU中,可以用whoami檢查是否有成功匯入

list可以查看可用的功能,執行run iam__bruteforce_permissions枚舉可用的權限

  • 提權
    • 這個部分講師並沒有詳細的說,只是稍微帶過而已,而且lab他也擋掉了提權


Container


S3

  • 資料儲存服務
  • 用API進行操作
  • 雲端環境中的角色
    • 資料長時間儲存
    • 資料交換
    • 儲存備份資料
  • 安全問題
    • 權限配置
    • 意外存取

如果S3的權限沒設定好,則可能造成資料外洩:s3-leaks。而有人也提供了一個服務,可以搜尋網路上公開的s3:https://buckets.grayhatwarfare.com/

s3規則

  • bucket 名稱唯一

  • 網址格式

    • <bucket name>.s3-地區.amazonaws.com
    • s3-地區.amazonaws.com/<bucket name>
    • e.g.: ais3-sample.s3-ap-northeast-1.amazonaws.com
  • 地區列表: https://docs.aws.amazon.com/en_us/general/latest/gr/rande.html#s3_region

  • 如果網站是自訂網域?

    • 使用img.ais3.org,而不是ais3.s3.amazonaws.com
    • img.ais3.org.s3-地區.amazonaws.com
  • 觀察header

列舉s3

  • 字典檔

    • 手動
      • 公司名稱
      • 參考實際使用名稱
      • 參考 DevOps 的命名方式
    • 自動
  • AWSBucketDump

    • 全自動列舉公開的AWS S3
    • 自動下載檔案
    • usage: python AWSBucketDump.py -l 字典檔 -g 關鍵字 -D -m 大小限制 -t 4

接著小lab,用工具爆破兩個s3 bucket。

Serverless

TOOD

Select a repo