Java에 버퍼 오버 플로우가 있습니까?
Java에 버퍼 오버 플로우가 있습니까? 시나리오 시나리오를 제공 할 수 있습니까?
Java Strings는 문자 배열을 기반으로하고 Java는 배열 경계를 자동으로 확인하는 버퍼 오버플로는 비정상적인 상황에서에서만 가능합니다.
- JNI를 통해 코드를 호출하는 경우
- JVM 자체에서 (일반적으로 C ++로 작성 됨)
- 인터프리터 또는 JIT 컴파일러가 선택 작동하지 검사 (Java 바이트 코드 필수 경계 검사)
Java 및 C #과 같은 관리 언어에는 코드를 실행할 수있는 특정 가상 머신 (JVM / CLR / etc)이 있습니다.
모든 의도와 목적을 위해 아닙니다.
Java에는 할당 된 배열 외부의 영역에서 데이터에 액세스 할 수 없는지 확인 하는 배열 경계 검사 가 있습니다. 배열 크기를 초과하는 영역에 액세스하면 예외가 발생합니다.ArrayOutOfBounds
Java Virtual Machine의 버그로 인한 수 있고 Java 사양에 Java Virtual Machine 사양에 의도 된 동작이 아닙니다.
스택 또는 힙 자체를 기본적으로 쓰는 엄격한 의미의 버퍼 오버플로에는 다음 중 하나가 필요합니다.
- 프레임 워크의 버그는 과거에 존재하고 있습니다 (다시있을 수 있습니다).
- JNI 사용 (본질적으로 더 이상 관리 코드를 사용하지 않음)
버퍼를 사용하는 코드가 있고 코드가 구문 분석을 담당하지만 그렇게하지 않는 경우에는 버퍼 오버플로가 있습니다. 예를 들어 XML 파서 작성하고 누군가가 잘못된 (또는 합법적이지만 일반적으로) 요청을 제공 할 수 있습니다.이 요청은 파서의 설계로 인해 이전에 이미있는 데이터를 일부 페이로드로 써 애플리케이션이 작동합니다. 하지 않습니다.
이 후자의 형식은 가능성이 적지 만 이와 같은 문제가있는 널리 배포 된 오류가있을 수있는 정리 함수는 초대 대상이 될 것입니다.
예, 아니오. 아니요, 관리되는 메모리 모델이기 때문에 실수로 버퍼 오버플로 발생에 노출 될 수 없습니다. 그러나 JVM 및 JDK에는 버퍼 오버 플로우가 있습니다. 이 Secunia 권고를 참조하십시오.
http://secunia.com/advisories/25295
또는 몇 가지 이전 JDK 및 JRE 취약성에 대한 이전 권고를 참조하십시오.
JRE (Java Runtime Environment) "unpack200"JAR Unpacking 유틸리티의 정수 및 버퍼 오버플로 때문에 권한 상승이 감시 가능 https://download.oracle.com/sunalerts/1020225.1.html
"unpack200"JAR 압축 해제 유틸리티를 사용하는 Java Web Start 응용 프로그램과 애플릿의 압축을 푸는 JRE (Java Runtime Environment)의 정수 및 버퍼 오버플로로 인해 수없는 애플릿 또는 응용 프로그램이 권한을 상승시킬 수 있습니다. . 예를 들어, 수없는 애플릿은 자신에게 권한을 부여하거나 수없는 애플릿을 실행하는 사용자가 액세스 할 수있는 로컬 응용 프로그램을 사용할 수 있습니다.
Sun은 iDefense VCP ( http://labs.idefense.com/vcp/ ) 및 Google의 Chris Evans와 협력 하여 문제를 지적 해준 "regenrecht"에 감사를 표 합니다.
Sun JDK (Java Development Kit) 및 JRE (Java Runtime Environment)에서 여러 대안이 확인되었습니다. https://security.gentoo.org/glsa/200705-23
Fujitsu 보안 팀에서 "모형 시스템 사용"과 관련된 불특정 시스템이보고되었습니다. 또한 Google 보안 팀의 Chris Evans는 JPG 또는 BMP 파일과 사용되는 ICC 파서 함께 오버플로를 초래하는 정수 오버플로와 특정 BMP 파일을 처리 할 때 / dev / tty에 대한 잘못된 open () 호출을보고했습니다. .
Java (및 .Net) 가상 머신은 예약 된 메모리 외부에서 쓰기를 시도하는 코드를 수행합니다. 여전히 보안 문제를 해결하지 않는 응용 프로그램은이를 처리하지 않습니다. 악의적 인 사용자가 잘못된 입력을 입력하여 예외를 트리거 할 수있는 경우 거부 서비스 공격을 수행 할 수 있습니다.
이미 지적했듯이 Java는 언어로서 모든 메모리 액세스에 대한 경계 검사를 수행하며 여기에 오류가 있으면 프로그램이 아닌 JVM에 결함이 있습니다. 그러나 주목해야 할 것은 자바의 메모리 누수와 주장이다. 스택을 부수는 불가능하지만 처리되지 않는 잘못된 위치의 ArrayOutOfBoundsException은 여전히 시스템을 망칠 수 있습니다.
일반적으로 정수 오버플로를 통해 메소드가 의도하지 않은 배열의 유효한 항목에 쓸 수 있습니다.
예를 들어 다음은 경계를 확인하는 데 충분하지 않습니다.
/* !! WRONG !! */ 0 <= off && 0 <= len && off+len <= buff.length /* !! WRONG !! */
IIRC는 StringBuffer
한때 그런 버그가 있었지만 당신이 할 수있는 것이 없었습니다.
JNI (Java Native Interace) 기능을 사용하여 외부 코드를 호출하고 외부 코드에 악용 가능한 문제가있는 경우 Java 프로그램에서 버퍼 오버플로가 저장되어 있습니다. 대부분의 애플리케이션은 가능한 경우 JNI를 사용하지 않기 때문에 매우 드문 경우입니다.
JAVA의 주요 기능 중 하나는 보안입니다. 인터프리터 언어로 내부 프로그램은 버퍼 오버 플로우 악용에 취약하지 않지만 인터프리터 자체에서 항상 오버 플로우를 많은 수 있습니다. 힘들지만. 많은 Python은 해석 된 언어이며, 오버플로로부터 안전합니다.
참고 URL : https://stackoverflow.com/questions/479701/does-java-have-buffer-overflows
'IT' 카테고리의 다른 글
"Arrange-Assert-Act-Assert"내에 삽입? (0) | 2020.09.05 |
---|---|
내 기능의 시간은 무엇입니까? (0) | 2020.09.05 |
ACE vs Boost vs POCO (0) | 2020.09.05 |
iPhone Simulator에서 생성 된 충돌 로그? (0) | 2020.09.05 |
java.lang.RuntimeException : Looper.prepare ()를 호출하지 않고 내부에 생성 할 수 없습니다. (0) | 2020.09.05 |