Java ON A SERVER 자체가 안전하지 않다는 것을 관리자에게 알리는 방법은 무엇입니까?


13

신청

우리는 일부 Camel 경로를 사용하여 웹 서버에서 업로드 된 파일을 가져 와서 처리하고 결과가 담긴 전자 메일을 보내는 작은 Java 응용 프로그램이 있습니다.

이 애플리케이션이 실행중인 서버가 폐기되었습니다. 지금은 웹 서버 (실제로는 다목적 서버)에 JRE를 설치하도록 관리자를 설득 할 수 없기 때문에 저전력 하드웨어에서이를 실행해야합니다.

공포

저는 Java Application Engineer이며, 일주일에 수만 유로에 이르는 B2B 거래를 처리하는 생계를위한 JEE 코드를 작성합니다. 그러나 자바 자체가 안전하지 않다는 신화를 반박하는 믿을만한 출처를 찾는 데 문제가 있습니다.

JRE 설치에 대한 관리자의 두 가지 주요 주장 :

  1. Java 응용 프로그램은 모든 RAM을 사용합니다.
  2. 자바는 취약점으로 가득

진실?

램을 먹는 자바 애플리케이션에 관해서. 음 ... Xmx에 적절한 값을 설정해야한다고합니다. 끝난.

이제 Java의 많은 취약점에 대해 이야기하는 소스가 많이 있습니다. 이 소스는 주로 Redmond / USA에있는 회사에서 특정 운영 체제를 실행하는 최종 사용자를 대상으로합니다. AFAIK 모든 애플릿을 자동으로 실행하도록 패치되지 않은 Java 브라우저 플러그인의 패치되지 않은 버전에 대해서는 사실 일 수 있습니다. 통근 통근 중에 열차에서 eveyone과 보호되지 않은 성관계를 가질 때 성병에 걸릴 위험이있는 것처럼.

그러나 전 세계 인터 웹에서 서버 응용 프로그램이나 JRE에 대해 이야기하는 사람을 찾을 수 없었습니다. 그것은 완전히 다른 것입니다.

아니면 여기에 뭔가 빠졌습니까?

[편집 2014-08-28] 설명 : 서버의 Java에만 관심이 있습니다. Java 플러그인 및 / 또는 java로 개발 된 특정 소프트웨어의 문제는 신경 쓰지 않습니다.


7
하드웨어가 제대로 작동하지 않아 문제가 발생하는 경우 SA의 우려와 함께 새 하드웨어를 구입해야하는 비즈니스 사례가 있습니다.
user9517

4
그가 dailywtf.com에서 본 코드가 회사 코드 가 아니라고 확신 시키 십시오 .
Michael Hampton

9
Java는 2013 년에 힘든 해를 보냈습니다. 방금 계속해서 제로 데이 익스플로잇추적 하는 웹 사이트 도있었습니다 . 작년 중반 이후로 0 일 동안의 익스플로잇은 없었지만 연구원들은 올해에만 107 개의 Java CVE를 발견 했습니다. 그것은 "보안"에서 먼 길입니다.
Chris S

5
악성 데이터를 애플리케이션에 공급하여 JVM 버그를 트리거 할 수 있습니까? 당신은 그것을 더 잘 믿습니다. 그리고 이러한 CVE 중 상당수는 일반적인 Windows 데스크톱 브라우저 플러그인이 아니라 서버에서 Java를 실행하는 것과 관련이 있습니다.
Michael Hampton

3
@lajuette 나는 이유를 위해 107 번호의 링크를 제공했습니다-당신이 그것을 클릭했다면 방금 요청한 모든 질문에 대답했을 것입니다. 이 중 107 개는 Android Dalvak와 같은 비 Oracle 구현과 관련되어 있지만 대부분은 Oracle 구현과 관련되어 있습니다. Java는 본질적으로 안전하지 않지만 Sun / Oracle의 JRE에는 문제가 있습니다. PHP, Perl, Ruby는 모두 취약점을 가지고 있습니다. 완벽하지는 않습니다. Java가 현재의 것보다 낫거나 나쁘면 말할 수 없었지만 작년에 그것은 확실히 보안 산업의 소년이었습니다.
Chris S

답변:


18

Java가 사용자 환경에 제공하는 추가 보안 표면은 복잡하므로이를 무시하거나 단순화하지 않는 것이 중요합니다.

첫째, JRE가 보안 버그를 가지고 있다는 끔찍한 기록이 있습니다. 특정 것을 지적하기는 어렵고, 이것은 무서운 부분입니다. 버그는 지정되지 않은 벡터를 가진 압도적으로 지정되지 않은 취약점입니다.

보안 컨설턴트로서 "원격 공격자 허용"과 같은 조항을 의미에 대한 추가 검증없이 읽으면 특정 기능에 들어가는 특정 매개 변수가 취약한 조건을 유발할 수 있음을 의미합니다. 당신이 작성한 코드만을 실행하고 있습니다. 그리고 그것들은 명시되지 않았기 때문에, 당신이 영향을 받았는지 알 수 없습니다.

또한 Oracle이 게시 한 정식 JRE에는 거의 모든 보안 업데이트를 포함하여 중요 업데이트에 대해 분기 별 업데이트주기가 명시되어 있습니다. 그들은 지난 4 년간 총 11 번의 패치를 만들어 냈습니다. 이는 문제를 해결하기 전에 보고 된 후 최대 3 개월 동안 보안 버그에 취약 할 가능성이 있음을 의미 합니다.

여기에 들어 가지 않을 Java에는 다른 문제가 있지만 실제로는 다목적 서버에 대한 정당한 우려가있는 것처럼 보입니다. 이러한 작업을 실행해야하는 경우 최소한 단일 목적 VM을 만들어 다른 것과 격리해야합니다.

특히, JRE에 공격자가 RCE를 얻을 수있는 원격 장치가 있고 동일한 작업을 수행하는 PHP 및 다른 작업을 다시 수행하는 다른 작업이있는 경우 세 가지를 모두 패치해야합니다. 세 가지 모두 이러한 일이 진행됨에 따라 다소 가능성이있는 것으로 보이며 공격자는 가장 편리한 것을 선택하여 전체 서버를 소유하게됩니다. 그렇기 때문에 VM을 사용하여 소프트웨어, 특히 관리되는 언어 프레임 워크와 같은 버그가있는 소프트웨어, 특히 1 년에 4 번만 보안 패치를 번들로 묶고 해당 소프트웨어가 보안.

업데이트를 위해 다음은 데모를 통해 ChrisS의 연결된 CVE 검색에서 선택한 CVE입니다.

내가 방문한 이후로 가장 좋아하는 부분은 다음과 같습니다.

그건 그렇고 작은 샘플링 일뿐입니다.


6

Java 응용 프로그램은 모든 RAM을 사용합니다.

RAM을 사용하는 대안은 RAM을 낭비하는 것입니다. 나중에 저장할 수 없습니다.

자바는 취약점으로 가득

JVM을 세계에 노출시키지 않기 때문에 실제로 중요하지 않습니다. 나는 당신이 적대적인 프로그램을 실행하지 않을 것이라고 생각합니다. 만약 그렇다면, 대부분의 다른 언어보다 Java가 더 안전합니다. 중요한 것은 응용 프로그램에 취약점이 있는지 여부입니다.


3
좋아, 이유는 작동하지 않습니다. 설득 도구 상자에 다른 도구는 무엇입니까? 녹슨 펜치가 있습니까?
David Schwartz

1
@FalconMomot 예, 커널은이를 사용하여 파일을 캐시 할 수 있습니다. 커널은 더 잘 사용한다면 JVM에서 메모리를 제거 할 수 있습니다. 이것이 모든 최신 OS가 작동하는 방식입니다. RAM을 사용하는 대안은 RAM을 낭비하는 것입니다. OS에는 RAM이 최상의 용도로 사용되도록 특별히 메모리 관리자가 있습니다. "Java 응용 프로그램이 내 RAM을 모두 차지합니다"와 같은 인수는 거의 항상 최신 운영 체제에서 RAM을 사용하는 방법을 이해하지 못하는 관리자를 나타냅니다.
David Schwartz

1
JVM이 메모리를 해제하지 않으면이를 수행하기 위해 스왑 공간 (있는 경우)으로 스왑해야합니다. 커널이 가비지 수집기를 호출 할 수 없습니다. 또한 파일 캐싱은 활용도가 거의없는 경우에도 사용자 공간 할당보다 우선 순위가 낮습니다 (커널이 거의 활용하지 않는다는 것을 커널이 알 수있는 경우).
팔콘 Momot

3
프로세스가 여전히 Linux를 소유한다고 생각하면서 Linux가 캐시에 RAM 블록을 동시에 사용할 수있는 방법에 대해 더 알고 싶습니다. 전에는 들어 본 적이 없습니다.
Michael Hampton

1
@FalconMomot 커널은 RAM이 "무료"인지 알 필요가 없습니다. 응용 프로그램이 페이지를 잠그지 않는 한 커널은 항상 RAM 사용을 제어합니다. RAM을 다시 가져 오려면 매핑 된 페이지를 버릴 수 있어야합니다. 데이터가 일정 기간 동안 수정되지 않고 사용되지 않고 I / O 대역폭이 포화되지 않으면 스왑에 데이터를 쓸 수있어 페이지를 버릴 수있어 RAM을 더 잘 사용하는 즉시 RAM을 회수 할 수 있습니다 그것을 위해. (이 공간은 현대 메모리 관리의 작동 방식을 설명하기에는 충분하지 않지만 매우 일반적인 오해가있는 것 같습니다.)
David Schwartz

2

프로그램에서 정적 분석을 수행 할 회사를 고용하십시오. 예를 들어 Veracode는 과거에 특히 Java 프로그램의 코드 보안 감사에 사용한 회사입니다.

관리자 팀의 청구 코드에 청구하십시오.


1

Java와 마찬가지로 다른 모든 언어 (또는 가상 머신)는 해당 언어로 배포 된 코드에 의해 안전하지 않게 렌더링 될 수 있다고 설명합니다. 그는 다른 플랫폼이 보안을 올바르게 처리하지 않고 본질적으로 안전하거나 Java보다 안전하다고 생각하면 망상입니다.

귀사에서 Java 개발자를 고용하는 데 분명히 투자 한 이유는 무엇입니까? sysadmin이 회사가 사용하기로 결정한 기술 지원을 거부하는 이유는 무엇입니까?

나는 그 질문을 뒤집어 그에게 제안하는 대안과 사용 가능한 최신 서버 JRE보다 더 안전한 방법을 매우 구체적으로 물어볼 것입니다. 그 동안 기술, 가능한 공격 영역 및 기술을 최소화하기 위해 노력했음을 이해하도록 노력하십시오 (예 : 불필요한 프레임 워크, 타사 코드 등). 코드를 확인하고 지난 X 년 동안 사용했던 프레임 워크에 대해 게시 된 취약점을 찾아 다른 언어 / 프레임 워크와 비교하십시오 (시장 점유율도 포함해야하며 게시 된 취약점이없는 프레임 워크는 아무 의미가 없습니다).

우리는 두 사람 사이의 전체 전환이 어떻게 발생했는지 알 수 없지만 이것이 두 가지 주장이라면 주니어 시스템 관리자와 관련이 있다고 생각합니다. Java 애플리케이션 서버에 경험이 있습니까? 어쩌면 그는 기술에 불편하고 철저하게 이해하지 않고 프로덕션에 무언가를 넣는 것을 두려워합니다 (좋은 시스템 관리자 태도).


감사. 우리는 회사에 대해 이야기하지 않습니다. 오히려 비영리 협회. Out sysadmin에는 IT 및 마케팅 분야의 의사가 있지만 "실제"sysadmin은 아닙니다. 그리고 네 : 나는 그가 완전히 이해하지 못하는 Java를 두려워한다고 생각합니다.
lajuette
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.