ercnam
6k
2019-06-25 13:20:58
16
1319

(SPRING)외부에서 서버단의 코드를 볼수있는 툴 같은게 있나요?


때는 바야흐로 저저번주쯤 보안감사...


얘기를 나누다가.. 운영중인 사이트의 IP접근제한은 어떤 방식으로 하냐고 물어왔습니다.


저는 서버단 코드에서 remoteAddress 를 받아서 미리 입력해둔 IP셋에 해당하지 않으면

접근 차단 페이지로 강제이동시킨다고 답했구요.


얘기를 듣더니... 고개를 갸우뚱 하며

"어....그렇게 하시면 외부에서 IP셋을 보고 우회할수도 있을텐데요?"

라고 해와서 저는

'아...이양반이 날 몰로보고... 내가 프론트단에다 그걸 넣어놨겠니'

라고 생각후 

"ㅎㅎ 그거는 자바스크립트단이구요, 저는 그 안쪽에 서버의 자바코드로 해놓은거라 괜찮습니다"


영 못미더운지 이따가 좀 실제 코드를 보자고 하더군요.

알았다 하고 진행했습니다.


그리고 실제 코드를 보여줬는데.......

String visitor = request.getRemoteAddr();
boolean deny = false;
List<String> allowList = new ArrayList<>();
allowList.add("허용아이피1");
allowList.add("허용아이피2");
for(int i = 0 ; i < allowList.size() ; i++) {
	if(visitor.equals(allowList.get(i))) {
		deny = true;
	}
}
// 접속자 아이피 불일치시 접속 차단 페이지로 리다이렉트
if(!deny) {
	response.sendRedirect("/deny");
	return false;
}


"음...이렇게 해놓으셔도요, 결국은 외부에서 다 긁어갈수 있거든요.

다 방법이 있어요"


...............????!!????

ㄹㅇ???

아니 저라고 뭐 빠삭하게 다 알고 있는건 아니지만,

상식적으로, 서버단 코드를 (손쉽게)유출시킬수 있으면

지금 존재하는 웹사이트들 존속이 가능하기나 합니까?

.........

제가 허접인지, 저양반이 허접인지좀 알고싶습니다.



........

.....

외전.

제목: 404가 뜬다는건 결국 보인다는 거거든요...

이것은 외전입니다.

위 코드에서 아이피가 일치하지 않으면 deny 라는 페이지로 리다이렉트 돌아가는 상황을

핸드폰으로 보여줬었는데요.

자기가 좀 만지더니 이럽니다.

"자 보세요, 404 에러가 뜨죠? 이거는 이미 서버에 붙었다는 거거든요.

비록 페이지는 뜨지 않지만 아무튼 서버에 붙었다는 겁니다. 문제가 있으니 시정하셔야 할듯 하네요"


뭘 했는고 하니, 주소창에 /deny 대신 아무 문자나 넣어서

말 그대로 찾는 경로없음 (404) 에러를 띄운거더라구요.


뭐... 404 에러가 서버는 요청을 성공적으로 받았지만 해당하는 페이지가 없음.

이라는 의미도 맞고 따라서 서버에 붙긴 했다는 말도 맞으며

404 에러페이지를 쌩으로 보여주는건 바람직하지 못하다는건 저도 인정하는데...

음...글쎄요. 어차피 무슨 수를 써도 인터셉터에 의해 경로를 가로채여서

deny 페이지로 리다이렉트 당할텐데?

물론 404 에러를 쌩으로 보여주는건 수정은 해야겠습니다만 과연 인터셉터를 뚫고 로그인이나 메인페이지에 접근할수 있는 방법이 있는지는 모르겠습니다.

뭐 어나니머스정도면 가능은 할거같은데 그양반들이 할거없다고 제 사이트나 털러 오진 않을거 같고..

0
  • 답변 16

  • Frudy
    7k
    2019-06-25 13:27:02

    "자 보세요, 404 에러가 뜨죠? 이거는 이미 서버에 붙었다는 거거든요.

    비록 페이지는 뜨지 않지만 아무튼 서버에 붙었다는 겁니다. 문제가 있으니 시정하셔야 할듯 하네요"

    저는 위 내용이 납득되지않아요.


    서버에 붙었다가 무슨말인진 모르겠지만,

    핵심은 허용되지않은 IP가 접근할 경우 못하게 막는거 아닌가요?


    답변자님은 충분히 잘 하신거같은대..(저는 학생이라 아는게 부족합니다)


    404 에러를 썡으로 보여준다가 무슨말씀이신진 모르겠지만,

    404에러페이지를 띄워주는게 왜 잘못된건지 잘 모르겠습니다. 네이버도 404에러페이지있는대..


    이 글에 흥미가 가네요 와드박아봅니다.

  • 아나콘다
    134
    2019-06-25 13:35:10
    와우 외부에서 소스를 볼 수 있다니 고수시네요
  • ercnam
    6k
    2019-06-25 13:37:00

    Frudy

    404에러를 나타내는 페이지 자체는 네이버 등에서도 띄워주긴 합니다

    (유저가 잘못된 요청을 했음을 알려야 하니까요)


    다만 일반적으로 아무것도 안한 상태에서 뜨는 404 페이지..

    HTTP Status 404 – Not Found


    Type Status Report

    Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.


    Apache Tomcat/9.0.8

    이거 말이죠.

    당장 404 페이지만 하더라도 해당 사이트의 톰캣 버전이 노출되고

    500에러 같은경우 SQL 문법 에러일경우 해당 DB 컬럼이 거의 노출됩니다.

    이런식이면 공격자 측에서 단서를 얻어갈수 있겠죠?

    그래서 404 에러등이 발생했을때 에러 발생 여부는 알려주되 저런 기본 페이지가 아닌 커스텀한 페이지를 노출해 줘야 한다고 알고 있습니다.


    죄송합니다.
    요청하신 페이지를 찾을 수 없습니다.

    방문하시려는 페이지의 주소가 잘못 입력되었거나,
    페이지의 주소가 변경 혹은 삭제되어 요청하신 페이지를 찾을 수 없습니다.

    입력하신 주소가 정확한지 다시 한번 확인해 주시기 바랍니다.

    관련 문의사항은 네이버 고객센터에 알려주시면 친절하게 안내해 드리겠습니다.

    감사합니다.


    씀하신 네이버도 404 에러를 이렇게 대응하고 있습니다.


    오류 자체는 알려주되, 그밖의 서버 정보가 노출되는건 막고 있죠.

  • siva6
    5k
    2019-06-25 13:41:07

    우선 서버를 어느 서버를 말하는지도 정확하지 않지만, 최소한 web server까지는 도달했네요.
    그 것도 원하지 않는다면, 방화벽이나 L7에서 막아야 됩니다.

    작성자님이 사용하는 방식도 많이 사용됩니다.

  • Frudy
    7k
    2019-06-25 13:42:27

    아~

    직접만든 404페이지가 아니라

    톰캣에 내장된? 웹브라우저에 내장된? 잘 모르지만

    기본적으로 뜨는 404페이지를 말씀하시는거였군요.


    이야.. 자세한 내용까지 알려주셔서 정말감사합니다.

    아무튼 본문의 서버 소스볼수있다는 내용에 흥미가있습니다.

    답변 기다리겠습니다.

  • ercnam
    6k
    2019-06-25 13:49:34

    siva6

    음.... 방화벽의 인바운드 룰에 넣어야 외부접속이 차단될텐데

    문제는 구동중인 사이트들이 모두 접근제한을 해야하면 간단한데

    일부는 또 퍼블릭 사이트고.... 해서 애매하네요.


    서버 머신에 톰캣 2개를 돌리고 하나는 퍼블릭, 하나는 접근제한 적용 이런식으로 해서

    접근제한 톰캣만 인바운드 룰을 넣으면 될까 싶기도 하고 = =;;;;

  • 엡실론
    1k
    2019-06-25 13:50:33
    뭐 물론 서버의 오류등으로 코드를 유출하게 될 수도 있지만, 쉽게 일어날 수 있는 일은 아니죠.

    ip whitelisting이 높은 수준의 보안은 아니지만, 여기저기서 많이 쓰이긴 합니다. 보안을 엄청 따지는 곳이라면 장기적으로는 인증서 기반으로 가는게 좋긴하지요.
  • 송박사
    89
    2019-06-25 14:00:19 작성 2019-06-25 14:01:05 수정됨

    검증 업체에 검증을 받는 경우

    404에러 뿐만 아니라 모든 에러페이지는 기본 에러페이지가 아니라

    커스텀 에러페이지로 보내는걸 정석으로 합니다


    java 소스에다가 ip 차단을 구현한 부분은

    class 파일을 디컴파일 하면 보일 수 있을지도 모르지만

    애초에 외부에서 was 의 class 파일을 긁어가는게 대체로 불가능하지 않나싶네요

    그렇게 크리티컬 한 보안 이슈가 있었다면

    개발자들 사이에서도 방어책이 널리 알려졌을텐데 딱히 들어본적 없는거 같습니다


    세상에 완벽한 기술이란건 없으니

    대단하신 해커분들이 각 잡고 뚫고 들어와서 긁어가려고 하면 가능할수도? ㅎ;;

  • 송박사
    89
    2019-06-25 14:25:11

    아 참고로

    ip 차단을 java 소스 내에서 구현한게 문제가 되는데

    방화벽에서 차단하기 힘든 경우

    web.xml 설정에서 RemoteAddrFilter 로 손쉽게 동일한 기능을 구현할수 있습니다

  • 제타건담
    7k
    2019-06-25 14:57:09

    근데 원래 저렇게 보안 검사를 할때 문제점이 있으면 그걸 고치는 방법도 같이 알려주는 편인데..그거는 알려주지 않던가요..?

    흠..404 에러가 떠서 서버에 붙었다는거만 가지고 얘기하자면..바꿔말하면 인위적으로 a.do, a1.do 머 요런식으로 계속 url 바꿔가며 접속시도를 해보면 먼가 붙기는 하겠죠..유효한 페이지는..

    그러나 그런식으로 따지자면 한도 끝도 없는건데..아예 접속을 하지 말라는거지..

    제가 볼땐..404 에러를 커스텀 페이지로 만들어서 보이는건 동의하겠는데..

    저렇게해서 어떤 유효한 페이지를 딱 때려 맞췄을 경우 public 한 페이지가 아닌 경우는 계정 권한을 확인하기 위한 로그인 페이지로 유도하게끔 하는게 맞지 않나요..?

    저런식으로 따지는건 너무 생트집인거 같아보여서..

  • ercnam
    6k
    2019-06-25 15:20:54

    제타건담

    그게 보니까 그양반도 사원급이고 본인도 이런건 처음해본단 듯이 말해서....ㅎㅎ

    사측에서 그냥 의례적으로 하는 행사(?)니까 초짜 보내서 경험치나 먹일려고(??) 한듯 합니다.

    원래 이런거 갑쪽에서 혼자 달랑달랑 오진 않거든요. 못해도 두명은 오지...


    뭐 주소를 아무거나 때려맞추다 보면 페이지가 뜬다....는 맞는 말이지만

    제 경우는 허용된 IP가 아니면 모조리 리다이렉트 걸리는 구조라 나름 안전하다고는 생각합니다.

    다만 웹서버에는 붙기는 할수 있으니까 그걸 이용해서 털어버릴 수단이 있다면 또 달라지긴 한데 불가능은 아니겠지만 쉽지는 않은 경지일거 같구요.

    이건 보안의 수준을 어디까지 기준을 놓고 보느냐에 따른 관점 차이라고 생각되어 그사람을 무조건 탓할수만은 없을거 같긴 해요.

    저는 페이지만 안뜨게 하면 된다는 주의인거고 그사람은 아예 웹서버에 못붙게 해야한다는 주의인거고.


    아무튼 저희 사무실에서 나가는 IP가 아닌 곳에서의 접속은 차단페이지로 리다이렉트 되며

    사무실에서 접속하면 로그인 페이지로 리다이렉트 되는 구조입니다.


    헌데.... 외부에서 우리 사무실 IP를 알아내었고

    외부에서 우리 사무실IP를 사칭(?) 해서 로그인 페이지를 띄우는 수법은 가능한가요?

    VPN을 쓰면 가능하려나...

    근데 동일 IP가 출처가 다르게 올수 있는것인가........... 모르겠군요.

  • 제타건담
    7k
    2019-06-25 15:54:57

    저도 그 얘길 하고 싶었던 거에요..

    IP는 사실 조작이 가능하기땜에 IP 필터링 방법도 작정하고 해킹하면 뚫립니다..

    그렇기때문에 그런 점검업체가 어느정도의 보안 수준을 지켜야 하는지 그걸 정하고..

    그거에 따른 가이드라인을 제시해야되요..

    무턱대고 이거 되고 있으니 이걸 막으라.. 이런식이 아니라..

    이게 우리가 제시한 가이드라인에 위배되고 있으니 우리가 가이드라인에 지정한 보안 프로그래밍 또는 설정을 적용해서 이것을 준수해라..이게 맞는거죠..

    저런 식으로 가이드하면 보안업체의 의미가 없습니다..왜냐면 저런 얘기는 보안업체가 아니어도 누구나가 할 수 있는거에요..

    보안업체는 보안의 문제점만 지적하는게 아니라 그 대응방안도 같이 얘기해줘야 합니다..

    까놓고 얘기하세요..그렇게 지적만 하지 말고 그러면 어떤 식으로 대응해야 하는지 구체적인 가이드라인을 달라고 하세요..

    그것까지 해줘야 보안업체입니다..그리고 그걸 준수했는데도 문제가 생기면 보안업체에 책임을 물을수 있죠..

    저런 식은 지적만 하되 책임은 지지 않겠다는것과 다를바가 없습니다..

  • ercnam
    6k
    2019-06-25 16:01:06

    제타건담

    그렇군요....흠.....

    그나저나 IP필터링도 뚫린다면 어떻게 막아야 하는거져 후..

    클라이언트측의 정보를 수집하는데 있어 IP보다 강력한 수단이 없을거같은데...

    그 이상으로 정보를 수집하려면 클라이언트의 로컬컴퓨터까지 접근해야되서

    막말로 액티브X라도 써야한다고 본 기억이.......


    사실 사무실의 컴터면 다 접속되게 해서도 안되고

    딱 그 업무 보는 사람 PC 에서만 접속되게 하라는 지적이 예전에 나온적이 있었는데

    (이번에 온 데랑은 다른 곳)

    도대체 퍼블릭IP 밑의 로컬IP를 어떻게 수집하라는거야? 라고 답이 안나와서 

    대충 핸드폰 문자인증으로 구현하고 퉁친적이...

  • 제타건담
    7k
    2019-06-25 16:40:31

    그래서 IP 필터링을 통한 보안을 하더라도 작정하고 뚫을려면 뚫리는 것이기 때문에..

    작정하고 뚫는거는 특수한 경우..라고 생각하고 일반인은 IP 조작같은 해킹행위까지는 하기 어려우니까..

    그거는 인정하고 안고 갈것인지..

    아니면 작정하고 뚫는것도 막아야 한다는 식인건지..사전에 조율이 필요합니다..

    그렇기때문에 이의제기를 하세요..

    IP는 만약 이용자가 IP 변조가 가능한 해커면 작정하고 뚫을 가능성이 있기 때문에..

    사용자의 정의를 이러한 해커가 아닌 일반인으로 가정하고 거기에 맞춰 보안을 진행할 것인지..

    아니면 그러한 해커까지도 막는걸로 갈건지..

    그러면 그걸 막을려면 어떻게 해야하는지도 알려달라고 해주세요..

    보안업체는 보안에 대한 방법도 제시해야 합니다..

    그래야 보안문제가 생겼을 경우 보안업체에 책임을 물을수가 있어요..

    아까도 얘기했다시피 점검 업체는 점검 뿐만 아니라 그걸 막는 가이드라인도 같이 제공해줘야 합니다..

    점검만 하는식의 보안업체는 의미가 없어요..점검 자체는 보안업체가 아니더라도 툴 돌리면 나오는거기땜에..

  • ercnam
    6k
    2019-06-25 16:47:58

    제타건담

    음...서술하는걸 빼먹었는데

    왔던 사람이 보안업체 사람은 아닙니다.

    그냥 갑쪽의 정보보안 부서랍시고 있는데서 오는건데

    저희가 을이다 보니 정기점검 나오는 거거든요...


    특징은 그겁니다. 이러이러한 문제가 있고 이 수준에 만족해야 하지만 방법은 니들이 찾으랑께~

    뭐 점검자도 일단은 보안쪽 부서 사람이니 관련 지식은 갖고있어서

    그럼 어떻게 하나요 라고 물으면 답해주는 경우도 있긴 한데


    이번같은 경우는 점검자도 좀 초짜고... "아 아무튼 찾아보면 있음" 이란 식으로 넘겨서 = =;;

    근데 말은 저렇게 하고 갔지만 차후에 날라오는 미흡점 지시사항이 날라오질 않는걸로 보아

    일단 공식적으로 취해야할 조치는 없는거 같긴 합니다만...흠.

    (점검때 구두로 말한 시정사항과 차후 공식문서로 날라오는 시정사항이 다른경우가 자주 있습니다.

    뭐 봐주겠다 이거죠...)

  • 제타건담
    7k
    2019-06-25 17:05:34

    아..저는 무슨 SI 프로젝트 하던 과정에서 발생한건줄 알았어요..

    흠..그러면 그런걸 요구하기는 어렵겠네요..

    이거는 머..글쎄요..보안문제로 이런게 발견이 됐는데..일단 우리는 체크해뒀어..그러나 문제가 생기면 너희 책임이야..이런 경우네요..

    이거는 다니시는 회사에서 별도 보안업체랑 계약을 맺어서 보완하든가 해야지..본인 혼자는 문제가 있어요..

    만약 그러면 상급자분에게 이런 요구 사항을 받았는데..이런거까정 하면 작정하고 둟을려고 하는거까지는 한계가 있으니 이거는 어떻게 처리해야 좋을지 한번 물어보고 정하세요..그리고 본인을 위해서 메일로 남겨두시면..

    나중에 문제가 발생하더라도 나는 상급자에게 이런 내용을 요청받아 어떻게 처리하면 좋을지 문의했는데 답을 못받았다..이럴수 있는거죠..

    이게 모양새가 일종의 폭탄 돌리기라 보기는 안좋습니다만..암튼..나 자신을 위해서면 나름 근거는 남겨야 하는지라..

    상급자가..너가 알아서 해..이렇게 답하면 것두 좀 글킨하지만..만약 그렇게 나오면 처리한 내역을 보여주고 검토해달라고 요청해야 할라나..암튼 애매하네요..

  • 로그인을 하시면 답변을 등록할 수 있습니다.