주요 논문
5
*2026년 기준 최근 6년 이내 논문에 한해 Impact Factor가 표기됩니다.
1
Article
|
인용수 5
·
2024R2I: A Relative Readability Metric for Decompiled Code
Haeun Eom, Dohee Kim, Sori Lim, Hyungjoon Koo, Sungjae Hwang
Proceedings of the ACM on software engineering.
역분해(Decompilation)는 저수준 기계 코드 스니펫을 C와 같은 고수준 프로그래밍 언어로 다시 변환하는 과정이다. 이는 역공학자들이 코드의 맥락적 의미론을 이해하는 데 도움을 주기 위한 기반으로 활용된다. 이러한 점에서 Hex-Rays와 같은 상용 역분해기들은 시간이 지남에 따라 역분해된 코드의 가독성을 향상시키는 데 상당한 성과를 거두었다. 선행 연구에서는 식별자, 변수명, 함수명, 주석을 포함한 소스 코드의 가독성을 평가하기 위한 메트릭을 제안해 왔으나, 주로 i) 소스에서 풍부한 의미론적 정보가 부족하고 ii) 오류가 있는 문법 또는 부적절한 표현이 존재하기 때문에 이러한 메트릭들은 역분해 코드의 가독성을 측정하기에 적합하지 않다. 이에 대응하여, 본 연구는 우리가 아는 한 역분해 코드를 상대적 맥락에서 정량적으로 평가하기 위해 특화된 메트릭인 R2I(Relative Readability Index)를 최초로 제안한다. 본질적으로 R2I는 i) 서로 다른 역분해기들로부터 얻은 코드 스니펫을 입력으로 하고 ii) 추상 구문 트리(abstract syntax tree)에서 사전에 정의된 특징들을 추출함으로써 계산될 수 있다. R2I의 견고성을 확보하기 위해, (비)상용 역분해기와 학술 연구가 코드 가독성을 증진하기 위해 수행해 온 향상 노력을 면밀히 조사하였고, 신뢰할 수 있는 지수를 집합적으로 산출하기 위해 31개의 특징을 식별하였다. 또한 본 연구는 개인의 코딩 스타일 및 선호와 같은 주관적 요인을 포착하기 위해 사용자 설문을 수행하였다. 실증 실험 결과, R2I는 역분해 코드의 상대적 품질(예: 난독화, 역분해기 업데이트)을 나타낼 수 있는 다목적 메트릭이며, 설문에서의 인간의 인식과도 잘 일치함을 보여준다.
https://doi.org/10.1145/3643744
Readability
Computer science
Identifier
Source code
Information retrieval
Abstract syntax tree
Program comprehension
Syntax
Natural language processing
Programming language
2
Article
|
·
인용수 3
·
2024An Empirical Study of JVMs’ Behaviors on Erroneous JNI Interoperations
Sungjae Hwang, Sungho Lee, Sukyoung Ryu
IF 5.6 (2024)
IEEE Transactions on Software Engineering
자바 네이티브 인터페이스(Java Native Interface, JNI)는 자바 애플리케이션이 네이티브 라이브러리에 접근할 수 있게 하지만, 올바른 JNI 프로그램을 개발하는 것은 어렵다. 네이티브 코드를 활용함으로써 JNI는 자바 개발자가 효율적인 애플리케이션을 구현하고 C 및 C++와 같은 다른 프로그래밍 언어로 작성된 코드를 재사용할 수 있도록 한다. 핵심 자바 라이브러리는 그래픽 사용자 인터페이스와 같은 시스템 기능을 제공하기 위해 JNI를 사용하며, 주류 자바 가상 머신(Java Virtual Machine, JVM) 또한 JNI를 지원한다. 그러나 서로 다른 프로그래밍 언어 간의 복잡한 상호작용 의미론 때문에, 올바른 JNI 프로그램을 구현하는 일은 사소하지 않다. JVM은 성능 오버헤드 때문에 기본적으로 JNI 상호작용을 검증하지는 않지만, 두 가지 방법을 제공한다. 첫째, JVM은 JNI 명세에서 정의된 상호작용 실패를 런타임에 보고한다. 둘째, JVM은 JNI 상호작용을 검증하지만 런타임 성능을 저하시킬 수 있는 디버그 옵션을 지원한다. 우리가 아는 한, 잘못된 JNI 상호작용이 부정확한 동작을 유발할 수 있음에도 불구하고, JVM의 이러한 방법들의 품질은 문헌에서 충분히 연구되지 않았다. 본 논문에서는 잘못된 JNI 상호작용에서의 JVM 동작을 경험적으로 연구한다. 체계적인 연구를 위해, 우리는 JNI 명세로부터 잘못된 상호작용을 유발하는 JNI 테스트 프로그램을 생성하는 반자동 도구 JUSTGen을 제안한다. JUSTGen은 도메인 특화 언어(DSL)로 작성된 JNI 명세를 입력으로 받아, SMT 솔버를 사용해 상호작용에서 런타임 오류로 이어질 수 있는 사례를 자동으로 찾아낸다. 이어서, 이러한 잘못된 사례에서의 동작을 유발하는 테스트 프로그램을 생성한다. 생성된 테스트를 사용하여, 우리는 잘못된 JNI 상호작용에서 JVM의 실패 처리 메커니즘과 디버그 옵션의 기능을 경험적으로 평가한다. 실험 결과, JVM이 실패를 처리하지 않거나 명세와 다르게 처리하는 잘못된 사례들이 존재함을 확인했다. 또한 JNI 디버그 옵션이 수천 개의 잘못된 사례를 검증하지 못하며, 이는 메모리 부패(memory corruption) 및 자바 타입 시스템 위반과 같은 치명적인 런타임 오류를 유발할 수 있음을 발견했다. 우리는 JVM이 실패를 올바르게 처리하지 않는 18개의 잘못된 사례를 각 해당 벤더에 보고했으며, 그중 16개 사례는 해결되었다.
https://doi.org/10.1109/tse.2024.3373239
Computer science
Empirical research
Programming language
Statistics
3
Article
|
·
인용수 11
·
2023EtherDiffer: Differential Testing on RPC Services of Ethereum Nodes
Shinhae Kim, Sungjae Hwang
블록체인은 피어-투-피어 네트워크 위에서 사용자 간의 거래를 기록하는 분산 원장이다. 그중에서도 이더리움(Ethereum)은 가장 널리 사용되는 범용 플랫폼이며, 스마트 컨트랙트의 지원으로 인해 탈중앙화 애플리케이션(decentralized applications, DApps)이라 불리는 새로운 형태의 응용이 등장하였다. 전형적인 DApp은 오프체인 프런트엔드와 온체인 백엔드의 아키텍처를 가지며, 프런트엔드는 예컨대 체인 데이터를 획득하거나 트랜잭션을 수행하는 등 백엔드 네트워크와의 상호작용이 필요하다. 따라서 이더리움 노드는 공식 RPC 사양을 구현하고, 프런트엔드에 대해 일관된 일련의 RPC 메서드를 제공한다. 그러나 해당 사양은 두 가지 점에서 충분하지 않다. (1) 비결정적 이벤트 처리에 대한 명확화가 부족하고, (2) 잘못된 인자에 대한 사양이 결여되어 있다. 이러한 불충분으로 인해 발생하는 어떤 편차도 효과적으로 드러내기 위해, 본 논문은 RPC 서비스 관점에서 네 가지 주요 노드 구현에 대해 자동으로 차등(differential) 테스트를 수행하는 EtherDiffer를 제안한다. EtherDiffer는 먼저 다중 동시 트랜잭션과 전파 지연을 통해 비결정적 체인을 생성한다. 그다음, 속성 기반 생성(property-based generation)과 타입 보존 변이(type-preserving mutation)라는 핵심 기법을 적용하여 의미적으로는 유효하면서도, 동시에 의미적으로는 무효이지만 실행 가능한 테스트 케이스를 모두 생성한다. EtherDiffer는 목표 노드에서 테스트 케이스를 실행하고 오류 처리나 반환 값에서의 어떠한 편차도 보고한다. 평가는 테스트 케이스 생성 기법의 유효성을 입증하였으며, 각각의 성공 비율은 98.8%와 95.4%로 나타났다. 또한 EtherDiffer는 충돌 및 서비스 거부(denial-of-service) 버그와 같은 11개의 구현 버그를 포함하여 48개의 서로 다른 편차 유형을 탐지하였다. 우리는 탐지된 44개 유형을 사양 및 노드 개발자에게 보고하였고, 이에 대한 승인 및 버그 패치를 받았다. 마지막으로 EtherDiffer는 모든 기술적 측면에서 공식 노드 테스트 도구보다 유의미하게 우수하였다. 우리는 본 연구 결과가 노드 간 불일치를 감소시켜 보다 안정적인 DApp 생태계에 기여할 수 있다고 믿는다.
https://doi.org/10.1145/3611643.3616251
Computer science
Executable
Node (physics)
Key (lock)
Exception handling
Set (abstract data type)
Distributed computing
Operating system
Computer network
Programming language
4
Article
|
·
인용수 12
·
2021JUSTGen: Effective Test Generation for Unspecified JNI Behaviors on JVMs
Sungjae Hwang, Sungho Lee, Ji-Hoon Kim, Sukyoung Ryu
자바 네이티브 인터페이스(Java Native Interface, JNI)는 자바 애플리케이션이 네이티브 라이브러리에 접근할 수 있는 방법을 제공하지만, 올바른 JNI 프로그램을 개발하는 것은 어렵다. 네이티브 코드를 활용함으로써 JNI는 자바 개발자가 효율적인 애플리케이션을 구현하고 C 및 C++와 같은 다른 프로그래밍 언어로 작성된 코드를 재사용할 수 있게 한다. 또한 핵심 자바 라이브러리는 이미 그래픽 사용자 인터페이스와 같은 시스템 기능을 제공하기 위해 JNI를 사용한다. 그 결과, 많은 주류 자바 가상 머신(Java Virtual Machine, JVM)들이 JNI를 지원한다. 그러나 서로 다른 프로그래밍 언어 간의 복잡한 상호운용 의미론 때문에 올바른 JNI 프로그램을 구현하는 것은 간단하지 않다. 더 나아가 성능 오버헤드로 인해 JVM은 기본적으로 잘못된 JNI 상호운용을 검증하지 않으며, -Xcheck:jni 옵션과 디버그 기능이 활성화될 때에만 이를 검증한다. 따라서 JNI 프로그램의 정확성은 JVM의 -Xcheck:jni 옵션에 의해 제공되는 점검에 크게 의존한다. 다만, 해당 기능이 제공하는 점검의 품질에 대해서는 여전히 의문이 남아 있다. -Xcheck:jni 옵션이 검증하지 못하는 성질(properties)이 존재하는가? 그렇다면, 그러한 검증 부재로 인해 어떤 잠재적 문제가 발생할 수 있는가? 우리가 아는 한, 이러한 질문을 심도 있게 탐구한 연구는 없다. 본 논문에서는 JNI 명세에서의 특정 코너 케이스(corner cases)로 설명되지 않은(unspecified) 경우를 사용하여, 주류 JVM에서 -Xcheck:jni 옵션의 검증 품질과 그 영향력을 경험적으로 연구한다. 명세에서 정의되지 않은 이러한 경우는 그 의미론이 명세에 규정되어 있지 않기 때문에 예기치 않은 런타임 동작을 초래할 수 있다. 체계적인 연구를 위해, 우리는 JUSTGEN이라는 반자동 접근법을 제안하여 명세로부터 미정의(unspecified) 경우를 식별하고 테스트 프로그램을 생성한다. JUSTGEN은 도메인 특화 언어(domain specific language, DSL)로 작성된 JNI 명세를 입력으로 받아 SMT 솔버를 사용하여 미정의 경우를 자동으로 탐색한다. 이어서 미정의 경우의 동작을 유발하는 테스트 프로그램을 생성한다. 생성된 테스트를 사용하여 -Xcheck:jni 옵션의 검증 능력을 경험적으로 평가한다. 실험 결과, JNI 디버그 기능은 JVM에서 수천 개의 미정의(unspecified) 경우를 검증하지 못하며, 그로 인해 자바 타입 시스템 위반과 메모리 손상과 같은 치명적인 런타임 오류가 발생할 수 있음을 보여준다. 우리는 해당 JVM 벤더에 보고되지 않은(unvalidated) 792개의 미정의 사례를 보고하였다. 그중 563개 사례는 수정되었고, 나머지 사례는 가까운 시일 내에 수정될 예정이다. 본 경험적 연구를 바탕으로, JNI 명세는 누락된 경우들의 의미론을 명확히 규정해야 하며, 디버그 기능은 완전하게 지원되어야 한다고 믿는다.
https://doi.org/10.1109/icse43902.2021.00151
Computer science
Programming language
Java
Debugging
Semantics (computer science)
5
Article
|
·
인용수 5
·
2020All about activity injection: Threats, semantics, detection, and defense
Sungjae Hwang, Sungho Lee, Sukyoung Ryu
IF 2.028 (2020)
Software Practice and Experience
요약 Android는 서로 다른 애플리케이션(app)의 활동을 동일한 활동 스택(activity stack) 안에 유지함으로써 원활한 사용자 경험을 지원한다. 이러한 긴밀한 앱 간 통신은 Android 프레임워크에서 필수적이지만, 강력한 앱 간 통신에는 취약점이 존재하며, 그로 인해 악의적인 활동을 피해 앱의 활동 스택에 주입하여 사용자 상호작용 흐름을 가로챌 수 있다. 본 논문에서는 간단한 악성코드를 이용한 활동 주입 공격을 시연하고, 연산 의미론(operational semantics)을 사용하여 활동 활성화 메커니즘을 형식적으로 명세한다. 연산 의미론에 기반하여, Android 앱을 분석하여 활동 주입 공격을 탐지하는 정적 분석 도구를 개발한다. 우리의 도구는 실제 환경의 Android 앱을 평균 6초 내에 분석할 만큼 충분히 빠르며, 실험 결과 129,756개의 실제 Android 앱 중 1761개가 다른 앱의 태스크(tasks)에 자신의 활동을 주입하는 것으로 확인되었다. 또한, signature-based activity access control(SAAC)이라 명명한 방어 메커니즘을 제안하며, 이는 활동 주입 공격을 완전히 차단한다. 해당 방어 메커니즘은 현재의 Android 멀티태스킹 기능을 그대로 유지할 수 있을 만큼 일반적이며, 복잡한 활동 활성화 연산 의미론에 독립적으로 동작할 만큼 충분히 단순하여 활동 활성화 시간을 눈에 띄게 증가시키지 않는다. SAAC에 대한 형식 의미론을 확장함으로써, SAAC이 어떠한 오탐(false alarm)도 없이 활동 주입 공격을 올바르게 완화함을 증명한다.
https://doi.org/10.1002/spe.2792
Android (operating system)
Computer science
Android malware
Malware
Human multitasking
Computer security
Operating system