잔디🌿 2025. 6. 2. 15:17


SSRF

ssrf는 서버가 외부에 요청을 보내도록 승인하는 것이다.

이 때 내부에서만 접근 가능한 서비스에 접근하거나

서버가 공격자가 지정한 외부 임의 시스템에 접근하거나

공격자가 민감한 데이터를 훔치거나

명령어 실행까지 가능하다 → shellshock도 가능

여기서 정상 명령은 위에 부분이다.

근데 공격코드는 재고확인을 서버의 로컬에서 하도록하였다.

이는 서버의 로컬에 간접적으로 접근했음을 의미한다

이 때 서버는 이를 신뢰된 요청이라고 착각한다.

이 문제는 서버 내부 요청에 대한 필터링은 없고 서버 내부 요청은 신뢰할만하다고 생각해서 생겼다.

관리자용 인터페이스와 사용자용 포트를 분리했지만 내부 포트에 접근이 가능해졌다.

방어기법 우회(Bypassing ssrf defenses)

127.0.0.1로 가는 걸 필터링해도 다른 우회 주소가 있다.

공격자가 자신의 domain 만들고 127.0.0.1로 매핑한다.

url인코딩 또는 대소문자 변형으로 우회한다.

특정 프로토콜만 검사한다면 다른 프로토콜을 사용한다.

서버는 expected-host만 보고 허용하지만 evil-host도 있다.

#뒤에 오는 것은 프래그먼트라 무시되지만 expected-host가 있어서 허용한다.

그리고 expected-host가 포함된 악의적 도메인을 생성한다.

필터는 expected-host 포함 여부만 확인하고 우회된다.

Explot Open Redirection

로그인창으로 리다이렉션 시키려고 했는데 해킹 사이트로 전송

마찬가지로 엉뚱한 곳으로 리다이렉션 시킬 수 있다.

SSRF With XXE injection

XML이란 태그기반 구조이고, 사용자가 만든다.

이렇게 사용자가 정의한 부분이 변수처럼 코드에 치환될수도 있다.

위에 있는 코드와 같은 공격을 하면 서버가 외부에 요청을 보내게 할수도 있고, 서버가 로컬 파일에 접속하게 할수도 있다.

이렇게 공격하면 서버 내부의 값을 읽어서 외부응답에 포함시킬 수 있다.

이렇게

Web LLM Attacks

LLM이 웹 앱에 통합되고있다.

내부프롬프트를 누설하거나, api 호출을 많이 해서 과금을 유도하거나 다른 유저를 공격할수도 있다.

direct injection : 챗봇에게 직접 전달하여 악성 데이터를 해석하게 한다.

시스템 메세지인척 모든 이메일을 가로챌 수 있다.

  • 클라이언트가 사용자의 프롬프트를 LLM에 전달한다.
  • LLM은 함수 호출이 필요하다고 판단하고, 외부 API의 스키마에 맞는 인자들을 포함한 JSON 객체를 반환한다.
  • 클라이언트는 제공된 인자들을 이용해 해당 함수를 호출한다.
  • 클라이언트는 함수로부터 받은 응답을 처리한다.
  • 클라이언트는 처리한 함수 응답을 새로운 메시지로 LLM에 다시 전달한다.
  • LLM은 이 응답을 바탕으로 외부 API를 호출한다.
  • LLM은 이 API 호출 결과를 요약하여 사용자에게 전달한다.

LLM은 ssrf에 남용될 수 있다.

정교한 쿼리로 api 알아낸다. 그리고 llm이 api 호출 권한을 가지고있는 것을 악용한다.

이런식으로 개발자라고 속이기

그리고 xss도 수행할 수 있고, 민감한 정보를 유출할수도 있다.

이런식으로 일부정보만 주고 완성하도록 유도한다

이를 방지하기 위한 정책

공개된 api로 간주해서 엄격하게 제어하기

LLM에게 민감한 정보 주지 않기

입력값 정제하기

정기적으로 모니터링하기