Tag Archives: OpenSource

Java와 Armeria로 기본적인 웹 서버 만들기

안녕하세요. LINE Developer Relations 팀의 Developer Advocate 윤인성입니다. LINE은 Armeria, Central Dogma 등의 다양한 오픈소스를 주도적으로 개발하고 있습니다.

오늘은 Armeria에 대해서 알아보고, Armeria를 사용해 기본적인 웹 서버를 구성해보는 방법에 대해서 알아보겠습니다. 이번 글은 Java와 IntelliJ가 기본적으로 설치되어 있다는 것을 전제로 진행합니다.

VoIP 오픈 소스 라이브러리인 PJSIP에서의 버퍼 오버플로우

안녕하세요. 보안실(애플리케이션 보안팀)에서 LINE 서비스의 보안 평가를 담당하고 있는 김영성(Facebook, Twitter)입니다.

이번 포스팅에서는 VoIP 오픈 소스 라이브러리인 PJSIP의 취약점(CVE-2017-16872, AST-2017-009)에 대해 다루고자 합니다. PJSIP는 표준 프로토콜인 SIP, SDP, RTP, STUN, TURN 및 ICE를 구현한 멀티미디어 통신 라이브러리입니다. IP-PBX, VoIP 게이트웨이 등에서 널리 사용되는 Asterisk 프레임워크에서도 PJSIP 기반으로 SIP 스택을 구현했습니다.

이번에 발견한 취약점은 64-bit 환경에서 클라이언트로부터 받은 SIP 요청을 처리할 때, signed int형을 unsigned long 형으로 변환하는 과정 중에, 정수의 부호 확장을 고려하지 않은 것이 원인이며, 결과적으로 이 취약점은 버퍼 오버플로우를 발생시킬 수 있습니다. 취약점을 확인한 후 PJSIP 개발팀에 문의했지만 보안 이슈를 제보할 수 있는 창구가 없어, Asterisk security 대응 창구제보했습니다. 이후 Asterisk의 개발자인 George Joseph씨와 패치에 대해 논의했고, pjproject 2.7.1 버전에 패치(PJSIP 패치, Asterisk 패치)가 적용되었습니다. 이 기회를 빌어 패치 작업을 진행해 주신 George씨께 감사드립니다.

Armeria 오픈소스화 이야기

Armeria는 Java 8 및 Netty 상에 비동기 RPC/API 클라이언트-서버를 구현한 것입니다. LINE은 작년 11월 Armeria를 Apache License 2.0이 적용되는 오픈소스 프로젝트로 배포했습니다. Armeria는 HTTP/2를 세션 레이어 프로토콜로 사용하는 고성능의 비동기 Thrift 클라이언트/서버를 구축하기 위해 만든 프로젝트이지만, 기본적으로 프로토콜의 제약을 받지 않으며 확장성이 뛰어납니다. (예를 들어, HTTP/2를 통해 정적 파일 디렉토리를 처리하는 동시에 Java EE 웹 애플리케이션을 실행할 수 있습니다.)

이 블로그에서는 기술적 측면에 초점을 맞추기 보다는 내부 프로젝트를 오픈소스로 만들어가면서 겪었던 과정을 소개하고자 합니다. Armeria의 기술적 내용을 알고 싶으시다면 지난 2월 개발자들을 대상으로 개최한 제14회 LINE Developer Meetup에서 발표한 슬라이드 자료를 참고 바랍니다.