Security

SpringBoot로 Log4j 취약점(Log4shell) 공격,방어 실습

SK_MOUSE 2022. 1. 19. 00:31

참고 유튜브링크

 

목표:

1. Spring Boot에서 기본 로그설정인 Logback을 Log4j로 바꾼 후 취약서버로 만든 후 공격을 시도합니다.

2. Log4j2 취약점을 이용해 웹서버에 악성 요청 보낼 경우 웹 서버에 어떤 일이 일어나는지 확인합니다.

3. log4j2의 버전을 올려서 방어가 되는지 확인합니다.


Postman으로 요청을 전송해본다.

spring-boot initializer로 아래와 프로젝트를 같이 만들어준다.

더보기
더보기
더보기

소스코드 보기

 

HomeController.java

@RestController public class HomeController { ​​​​Logger log = LoggerFactory.getLogger(HomeController.class); ​​​​@RequestMapping("/") ​​​​public String index(String name){ ​​​​​​​​log.debug("index! name:{}", name); ​​​​​​​​return "index"; ​​​​} }

Log4shellServerApplication.java

@SpringBootApplication public class Log4shellServerApplication { public static void main(String[] args) { ‌‌System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase", "true"); ‌‌SpringApplication.run(Log4shellServerApplication.class, args); } }

 

application.properties

logging.level.com.skmouse=TRACE

 

나머지 코드는 하단 참고

아래와 같이 POST로 전송시 이름이 로그에 이름이 찍힌다.

자 이제 log4j를 사용하기 위해 pom.xml을 수정해준다.

pom.xml 설정
추가로 springboot를 사용하기 때문에 log4j 취약점이 있던 2.14.1로 버전을 바꿔준다.

 

추가로 java 버전에서 막는것을 낮춰주기 위해 설정을 더 진행한다.

위와 같은 프로퍼티 설정이 필요.


이제 처음에 했던 것처럼 post를 날려주면

이러한 에러가 나온다.

이러한 에러는 겉으로 보기엔 아무렇지 않아보이지만, 특정 ip주소의 프로그램 실행을 요청하게된다면

다른 ip주소에서 프로그램 실행하는 환경 : JNDIExploit 검색ㄱㄱ 
프로그램이 실행되는모습

위와 같이 프로그램이 강제로 실행된다.

반응형