문제

는 Java 있는 buffer overflow?그렇다면을 줄 수 있습니까?

도움이 되었습니까?

해결책

Java 문자열은 숯 어레이를 기반으로하고 Java는 배열 경계를 자동으로 확인하므로 버퍼 오버플로는 비정상적인 시나리오에서만 가능합니다.

  1. JNI를 통해 기본 코드를 호출하는 경우
  2. JVM 자체에서 (보통 C ++로 작성)
  3. 통역사 또는 JIT 컴파일러가 올바르게 작동하지 않습니다 (Java Bytecode Modated Bounds Checks)

다른 팁

Java 및 C#과 같은 관리 언어에는 이러한 문제가 없지만 실제로 코드를 실행하는 특정 가상 머신 (JVM/CLR/등)은 할 수 있습니다.

모든 의도와 목적을 위해, no.

Java에는 배열이 있습니다 경계 점검 이는 할당 된 배열 외부의 영역에서 데이터에 액세스 할 수 없는지 확인합니다. 배열의 크기를 넘어서는 영역에 접근하려고 할 때 ArrayOutOfBounds 예외가 발생합니다.

버퍼-오버 런이 있다면, 아마도 Java 가상 머신의 버그에서 나온 것일 수 있으며, 내 지식은 Java 언어 사양이나 Java 가상 머신 사양으로 작성된 의도 된 동작이 아닙니다.

스택 또는 힙 자체를 덮어 쓰는 엄격한 의미의 버퍼 오버 플로우에는 다음 중 하나가 필요합니다.

  1. 프레임 워크의 버그 (이들은 과거에 존재했으며 다시 잘 어울릴 수 있음)
  2. JNI 사용 (본질적으로 더 이상 관리 코드를 사용하지 않음)

버퍼 오버 플로우는 버퍼를 사용하는 코드가 있으며 코드가 올바르게 구문 분석 할 책임이 있지만 그렇게하지 못한다는 의미에서 버퍼 오버플로가 가능하지만 가능합니다. 예를 들어 XML 파서를 작성할 수 있으며 누군가가 귀하의 애플리케이션이 잘못 행동하게하는 일부 페이로드로 이전에 검증 된 데이터를 덮어 쓰는 데이터의 설계로 인해 잘못된 (또는 합법적이지만 드문) 요청을 제공 할 수 있습니다.

이 후자의 형태는 가능성이 적지 만, 제대로 쓰여진 SQL 문자열 클렌징 기능은 널리 분포되어 있으며 이와 같은 문제가있는 대상이 될 것입니다.

예 그리고 아니오. 아니요, 관리되는 메모리 모델이기 때문에 실수로 버퍼 오버플로 취약점까지 실수로 자신을 열 수는 없습니다. 그러나 JVM 및 JDK에는 버퍼 오버 플로우 취약성이있을 수 있습니다. 이 Secunia 자문을 참조하십시오.

http://secunia.com/advisories/25295

또는 이전의 여러 JDK 및 JRE 취약점에 대한 오래된 권고 사항을 참조하십시오.

  • JAVA 런타임 환경 (JRE)의 정수 및 버퍼 오버 플로우 취약성 "UNUC KACK200"JAR 포장 유틸리티는 권한의 에스컬레이션으로 이어질 수 있습니다. https://download.oracle.com/sunalerts/1020225.1.html

    "unpack200"jar 포장 유틸리티를 사용하여 포장 풀기 애플릿 및 Java 웹 시작 애플리케이션이있는 JRE (Java Runtime Environment)의 정수 및 버퍼 오버 플로우 취약점을 사용하면 신뢰할 수없는 애플릿 또는 응용 프로그램이 권한을 에스컬레이션 할 수 있습니다. 예를 들어, 신뢰할 수없는 애플릿은 신뢰할 수없는 애플릿을 실행하는 사용자가 액세스 할 수있는 로컬 파일을 읽고 쓰거나 로컬 애플리케이션을 실행할 권한을 자체로 부여 할 수 있습니다.

    Sun은 Idefense VCP와 함께 일하는 "Regenrecht"에 감사합니다.http://labs.idefense.com/vcp/) 및 Google의 Chris Evans는 이러한 문제를 우리의 관심을 끌었습니다.

  • Sun Java Development Kit (JDK) 및 JAVA 런타임 환경 (JRE)에서 여러 취약점이 확인되었습니다. https://security.gentoo.org/glsa/200705-23

    Fujitsu Security 팀은 "시스템 클래스의 잘못된 사용"과 관련된 불특정 취약점을보고했습니다. 또한 Google 보안 팀의 Chris Evans는 정수 오버플로를보고하여 JPG 또는 BMP 파일과 함께 사용되는 ICC 파서의 버퍼 오버플로와 특정 BMP 파일을 처리 할 때 /dev /tty에 대한 잘못된 Open () 호출을보고했습니다.

Java(다.Net)가상 머신을 잡을하는 코드를 작성하려고 외부의 reserved 메모리입니다.지 않는 응용 프로그램이 올바르게 여전히 발생할 수 있습니다 보안 문제입니다.는 경우 사용자가 악성할 수 있는 예외를 트리거 입력하여 잘못된 입력 할 수 있는 서비스 거부 공격에 대한 예입니다.

로 이미 지적,Java 는 언어로서,범위 검사에서 모든 메모리 액세스,그리고 오류가있는 경우에,여기에 JVM 은 잘못이 아닌 프로그램입니다.그러나 무엇을 주목해야한다는 비슷한 인수하는 메모리 누수 Java;지 않는 동안 가능한 분쇄하기 위해 스택 ArrayOutOfBoundsException 잘못된 장소에서는 올바르게 처리하지 않도 끝까지사 시스템입니다.

방법이 일반적으로 정수 오버플로를 통해 의도하지 않은 배열의 유효한 항목에 쓸 수 있습니다.

예를 들어 다음은 한계를 확인하기에 충분하지 않습니다.

/* !! WRONG !! */ 0 <= off && 0 <= len && off+len <= buff.length /* !! WRONG !! */

IIRC, StringBuffer 한 번 그런 버그가 있었지만 흥미로운 일은 없었습니다.

JNI (Java Native Interace) 시설을 사용하여 외부 코드를 호출하는 경우 Java 프로그램에서 버퍼 오버플로를 유발할 수 있으며 외부 코드는 악용 가능한 문제가있었습니다. 대부분의 응용 프로그램은 가능한 경우 JNI를 사용하지 않기 때문에 이것은 드문 일입니다.

Java의 주요 기능 중 하나는 보안입니다. 해석 된 언어로 작성된 프로그램은 버퍼 오버 플로우 익스플로잇이 발생하기 쉬운 것이 아니지만 해석자 자체에서 항상 버퍼 오버플로를 유발할 수 있습니다. 어려울 것입니다. 마찬가지로 Python은 또한 해석 된 언어이며 버퍼 오버플로로부터 안전합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top