PSA: 원격 JDWP 디버깅의 위험

이것은 안전 위험이라기보다는 열려 있는 문으로 모든 물건에 라벨을 붙이고 누구나 자유롭게 휴대할 수 있으며 성냥도 태울 수 있다.
내가 가르치거나 강의를 하거나 안전을 언급할 때, 나는 항상 안전을 양파에 비유하는 것을 좋아한다.이것은 흔히 볼 수 있는 케케묵은 말이지만, 이러한 개념에 익숙하지 않은 사람들에게는 여전히 강력한 유비이다.원격 디버깅에 있어서 나는 앞문을 열고 모든 귀중품을 식별하기 쉽고 라벨이 뚜렷한 상자에 쌓아 놓는 것과 비슷한 유형을 선택할 것이다.JDWP가 안전하지 않다고 말하는 것은 아무런 의미가 없다.그것은 안전을 위해 설계된 것이 아니기 때문에 그것은 아니다...
JDWP(Java 디버그 라인 프로토콜)는 내부 테스트를 위해 설계되었습니다.지난 몇 년 동안 나는 많은 사람들을 만났는데, 그들은 심지어 생산 과정에서도 잘못을 저질렀다.
미치겠네!
내부에서도 큰 위험60% of breaches originating from inside the organization이다.좋아요.

이것은 단순한 보안 위험이 아니라 모든 해커가 서버의'키'와 서버 코드에 대한 완전한 접근권을 가지게 할 수도 있다. 이것은 심각한 안정성 위험으로 생산 서버를 붕괴시키기 쉽다.
무대 위에서도 문제가 되는 사례다.임시 저장 서버는 때때로 인터넷에 노출되지만 내부 서버의 발판이 될 수 있다(예를 들어 같은 호스트이기 때문에 방화벽 규칙 아래에서 미끄러질 수 있다).일단 해커가 원격 디버깅 프로토콜을 침입할 수 있다면, 그들은 쉽게 진정한 서버로 뛰어들 수 있다.
내가 계속하기 전에, 나는 나의 편견을 분명히 하고 싶다. 나는 Lightrun를 위해 일한다.우리는 많은 면에서 디버거를 대체하는 도구를 실현했다. 이 디버거는 안전하게 무대에 올라 생산을 하는 데 목적을 두고 있다.그럼에도 불구하고, Lightrun을 사용하지 않더라도, 이 글을 읽어야 합니다. 왜냐하면 아래에 열거한 사실은 원격 디버깅을 사용하는 모든 사람에게 적용되기 때문입니다.
내가 지적하고 싶은 또 다른 일은 내가 안전 전문가가 아니라는 것이다.나는 확실히 안전 전문가에게서 이 주제에 관한 우수한 문장을 읽었다. 예를 들어 Assaf Morag.나는 네가 안전 연구원이나 devops라면 아주 좋을 것이라고 생각한다.본고는 주로 개발자의 시각을 주목한다.
보안 전문가가 될 필요 없이 이러한 개념과 고유의 결함을 이해할 수 있음을 주의하십시오.이런 의미에서 말하자면, 이 문장은 아사프의 문장보다 훨씬 간단하다.이 글도 자바에 심각하게 치우친다. 왜냐하면 자바는 나의 주요 전공 분야이지만 다른 언어/플랫폼에서는 상황이 별로 좋지 않기 때문이다.

설계상 안전하지 않다


대부분의 원격 디버깅 프로토콜, 예를 들어 JDWP는 다른 시대의 산물이다.이 시대는 우리에게 텔넷과 HTTP를 주었다.기본적으로 대부분 암호화되지 않습니다.JDWP를 활성화warrants a CVE하기만 하면 됩니다.
JDWP는 원격 코드를 효과적으로 실행할 수 있습니다.서버의 모든 바이트에 접근할 수 있도록 합니다. 이것은 실제적으로 완전한 서버 소스 코드에 접근하는 것과 거의 같습니다.그것은 안전성을 고려하지 않았기 때문에 공격자들이 거의 모든 일을 할 수 있게 했다.
나는 심지어 중간인 공격의 복잡성을 토론하고 싶지 않다. 이것은 정말 미친 짓이다.
가장 좋은 완화 조치는 SSH 터널을 통한 연결이라고 본다.그것은 결코 모든 문제를 해결할 수 없지만, 적어도 우리가 흔히 만나는 것처럼 큰 구멍은 아니다.이전처럼 원격 디버깅을 설정하지 않고 서버 로컬 호스트로 설정하면 됩니다.
java -agentlib:jdwp=transport=dt_socket,server=y,address=9000 ApplicationName
이 기기에 원격으로 연결하려면 SSH가 기기에 액세스하고 다음 명령을 실행해야 합니다.
ssh remoteUser@remoteHost -L 9000:127.0.0.1:9000 -N
명령의 증빙서류가 필요하면 거기에 추가할 수도 있습니다.이것은 로컬 기계의 포트 9000과 원격 기계 사이에 터널을 열 것이다.로컬 호스트에서 디버깅을 할 수 있지만, 표준 원격 디버깅기로 사용할 수 있습니다.유일한 차이점은 안전에 있어서는 그렇게 나쁘지 않다는 것이다.

차에 치여 화상을 입다.


불행하게도, 이러한 변통 방법은 디버깅 프로토콜에 파괴된 모든 다른 내용에 영향을 주지 않을 것이다.디버거의 일부 조작은 프로토콜 절차가 한 가지가 아닙니다.따라서 디버그 대상에게 요청을 보낼 수도 있고 연결을 잃을 수도 있으며 디버그 대상이 문제에 빠질 수도 있습니다.
이것은 JDWP 프로토콜의 고유한 제한으로 표준 디버거에서 해결할 수 없습니다.
문제는 무의식적인 조작이라도 서버를 파괴할 수 있다는 것이다.조건의 일부로 호출되는 간단한 조건 단점은 서버의 성능을 파괴하고 붕괴시킬 수 있습니다.

정보 필터



열광적인 고전적인 사무 공간에서 영웅들은 거래에서 동전을 선별한다.대형 조직이 이런 방문을 많이 차단하는 것은 당연하다.
만약 당신의 모든 동료들이 당신의 서버를 디버깅할 수 있다면... 사용자 로그인 코드에 조건부 단점을 설정하기만 하면 해독할 수 있는 사람의 비밀번호가 생길 것이다.만약 네가 매우 똑똑하다면, 너는 다른 사이트에서 이 비밀번호를 사용해 볼 수 있다. 아무도 알지 않아도, 이렇게 하면 너를 추적할 수 없다.
정말로 그렇게 하지 마라!
이것은 서버에 JDWP를 설치하는 데 있어서 매우 진실한 위험입니다. 이 점을 기억해야 합니다.

저희가 어떻게 Lightrun에서 이 문제들을 해결했는지.


Lightrun에는 거의 모든 문제가 없습니다.내가 시작하기 전에, Lightrun은 당신에게 디버깅을 시작하라고 하는 것이 아니라... 신분 검증을 해야 합니다.회사 규정 준수, 특정 권한을 제공하는 사용자 역할 등 액세스 시스템이 있습니다.

설계상 안전하지 않다


Lightrun은 JDWP를 사용하지 않고 사용자 정의 에이전트를 사용합니다.이것은 서비스에 추가 포트를 열 필요가 없다는 것을 의미합니다.
프록시가 관리 서버에 연결되어 있기 때문에 정보는 항상 추출되지 전송되지 않습니다.또한 연결은 인증서로 고정되어 있어 중간자의 공격을 막는다.

차에 치여 화상을 입다.


Lightrun의 작업은 장애 보호 메커니즘과 샌드박스를 사용하여 수행됩니다.
에이전트에 보내는 작업은 원자 작업이기 때문에 연결 실패는 에이전트에 영향을 주지 않습니다.
그 밖에 조건과 표현식이 샌드박스화되어 검사되었다.CPU를 너무 많이 사용하거나 쓰기 작업이 감지되면 작업이 취소되거나 속도가 제한됩니다.속도 제한이 발생하여 서버가 안정적이고 성능이 유지된다는 것을 보여 주는 출력을 받을 것입니다.

정보 필터


Lightrun에는 PII 감소 및 차단 목록이 있습니다.이것은 Lightrun이 로그에 문제가 있는 패턴, 예를 들어 신용카드 번호를 검출할 수 있다는 것을 의미한다.그리고 이 숫자들이 로그에 들어가는 것을 막을 수 있다.
이것은 완전히 설정할 수 있는 매번 설치이기 때문에 당신은 사회안전번호 등을 설정할 수 있습니다.
차단 목록은 디버깅을 막는 클래스, 파일 등을 정의할 수 있습니다.초기 설정을 디버깅한 후 인증과 권한 수여 패키지만 제외하면 악성 개발자는 스냅샷을 설치할 수 없습니다.
마지막으로 Lightrun의 모든 컨텐트가 검토됩니다.접근 제한 권한을 잊어버려도 이 모든 것이 기록된다는 뜻이다.사용자가 추가한 스냅샷(중단점) 또는 로그는 감사 로그에 추가됩니다.그래서 악성 개발자는 우리가 추적할 수 있는 디지털 단서를 남긴다.

TL;박사 01 명


정말 필요하지 않으면 원격 디버깅을 사용하지 말고 아무도 시스템에 접근할 수 없도록 하세요. 그런 상황에서도 SSH 터널을 통해 연결하는 것을 경계해야 합니다.
조건 인터럽트와 다른 복잡한 디버거 기능을 조심스럽게 사용하십시오.이런 상황에서 그것들은 재난을 초래할 수 있다.
서버에 접근할 수 있는 모든 사용자에게 왕국의 키를 제공하는 것이 사실입니다.소스 코드와 데이터베이스뿐만 아니라 모든 암호화된 데이터, 예를 들어 암호화도 접근할 수 있습니다!
나는 네가 이것이 매우 유용하다고 생각하고 배치할 때 안전을 유지하기를 바란다.나의 업데이트와 더 많은 정보를 주목해 주십시오.

좋은 웹페이지 즐겨찾기