CentOS 에서 openssl 설치 관련 질문입니다.
안녕하세요
HEART BEAT 취약점 구현을 하기 위해서
apache + php + openssl (취약한 버전) 으로 서버를 만들고
패킷생성기로 HEART BEAT 패킷을 생성하여 서버로 보내면 그때의 패킷을 캡쳐하여
snort 룰을 적용하여 탐지하는 시나리오로 구현하려고 합니다.
그런데 문제는 제가 사용하고 있는 CentOS6.5 에서는 기본적으로 패치된 openssl이 설치되어 있어서
취약한 버전으로 다운그레이드를 해야 하는데요, 이를 위해서 얼마전에 질문을 올렸으나 해결을 못하였습니다.
apache 와 연동하여 쓰려면 취약한 버전의 openssl 소스를 컴파일 해서 써야하는지 아니면 rpm 을 써서 해야하는지...
openssl 을 다운그레이드 하고 싶어서 취약한 버전의 openssl.rpm 을 다운받은 후 rpm -Uhv --force openssl-version.rpm
명령어를 써서 다운그레이드 하려고 하였으나 의존성 문제 때문에 오류가 생겨 다운그레이드가 되지 않았습니다. 그래서 낮은 버전의
openssl 소스파일을 컴파일 하여 설치하였으나, 이게 제대로 설치가 되어서 연동이 되는건지도 잘모르겠습니다.
그래도 일단 해보자고 생각해서 apache 를 설치하고 환경설정을 하다가 자리를 이동해야 해서 centos 를 종료하였는데, 다시 켜려고
하니 진행 bar 가 마지막에 회색으로 변하면서 켜지지도 않더군요.. 그래서 오늘은 낮부터 지금까지 윈도우로 openssl 을 컴파일 하고
apache 와 연동을 하려고 하였으나 apache 를 컴파일 하는 과정이 쉽지만은 않네요...
그래서 centos를 다시 설치하고 처음부터 다 다시 시작하려고 합니다. 제가 아직 배우는 단계의 학생이라 지식이 많이 부족하여 질문조
차 제대로 하고 있는건지 잘 모르겠네요.
어느 누군게에는 간단한 환경설정일지 모르겠으나 저는 지금 이걸 해결도 못하고 딱히 주변에 물어볼 사람도 없어
이글을 읽고 계시는 분들께 제가 처한 문제에 관해 조언 한마디씩 부탁드립니다...징징거리는 글 읽어주셔서 감사합니다.
(아무래도 프로그래머로 직장을 구하고 먹고 살려면 스트레스 관리 능력이 좋아야 할거같네요. )
일단 너무 어렵게 진행하시는 것 같아.. 다른 방법을
일단 너무 어렵게 진행하시는 것 같아.. 다른 방법을 알려드리겠습니다.
일단, 컴파일은 생각하지 마시고, 현재 시스템에 설치되어 있는 것을 그대로 활용하도록 하세요.
1. 취약점이 있는 openssl rpm version을 특정 위치에 풀어 놓습니다.
이렇게 하신 후에, apache를 시작하는 script나 shell에서 다음의 환경 변수를 export 합니다.
이렇게 하시면 /usr/lib(32bit) 또는 /usr/lib64(64bit) 에 있는 openssl이 아니라 /opt/openssl-heartbeat 에 있는 openssl을 link해서 구동이 되게 됩니다. 즉 컴파일을 다시 할 필요가 없다는 얘기이죠. 실제로 이렇게 구동이 되었는지는 lsof 명령을 이용해서 확인이 가능 합니다.
그리고, openssl 은 해당 배포본 버전의 것을 이용해야 합니다. 즉, centos 6에서 centos 7이나 centos 5의 openssl을 사용하면 library 의존성 문제 때문에 실행 자체가 안될 수 있습니다.
답변 감사합니다!! rpm -Uhv --force
답변 감사합니다!!
rpm -Uhv --force --nodeps openssl-version.rpm 명령어를 사용해서 억지로 설치하긴 했는데
그냥 centos 새로 설치하고 하는 알려주신 방법으로 하는게 더 좋을것 같네요!!
아 깜빡 한 것이 있는데, 아마 apache init
아 깜빡 한 것이 있는데, 아마 apache init scritp에서 환경 변수를 reset 할 수 있습니다. 이럴 경우에는 init script를 사용하지 말고 직접 실행하셔야 할 수도 있습니다.
답변 감사합니다 :-)
답변 감사합니다 :-)
안녕하세요 알려주신 방법으로 해봤는데 잘
안녕하세요 알려주신 방법으로 해봤는데 잘 안되는것같아서
염치 불고하고 또 질문 드립니다
export 하고.
lsof 명령어를 써서 확인해봤는데 opt/openssl 에 관한 내용은 없는거 같아
댓글로 달아주신 방법인 직접실행? 을 해봐야 할거 같은데
직접 실행이 구체적으로 무엇을 의미하는것인지 이해가 잘안됩니다.
아래 그림파일은 스크린 샷입니다.
일단 image 상을 apache가 rpm은 아닌 듯
일단 image 상을 apache가 rpm은 아닌 듯 싶군요 :-)
shell에서
export LD_LIBRARY_PATH="/opt/openssl-heartbeat/usr/lib64:${LD_LIBRARY_PATH}"
ldd /usr/local/httpd-2.4.3/SOME-PATH/mod_ssl.so
하셔서 libssl.so 가 /opt/openssl-heartbeat 를 링크하는지 확인해 보세요. 일단 이것이 확인이 된다면, init script에서 httpd 실행 명령을 찾아서, 현재 쉘에서 직접 실행해 보신 후에, lsof | grep httpd | grep ssl 명령으로 /opt/openssl-hearbeat 을 링크하고 있는지 확인하시면 됩니다. (64bit 가정으로 설명 드린 겁니다. 32bit라면 lib64가 아니라 lib로 하시면 됩니다.) 설마 64bit 32bit 패키지를 혼용하고 계신건 아니겠죠?
일단, 환경 자체가 제가 말씀드린 환경과 다른 것으로 보이기 때문에, 왜 안되는지에 대해서는 체크할 방법이 없네요 :-) 불편하겠지만 LD_LIBRARY_PATH를 export 한 쉘에서 httpd binary를 직접 실행하시면 될 겁니다.
혹시 안되서 다시 질문을 하실 때에는 mod_ssl.so 경로와 apache binary의 32/64bit 정보, lsof | grep httpd | grep ssl 결과, LD_LIBRARY_PATH가 export된 쉘에서 ldd mod_ssl.so 의 정보를 같이 주세요.
apache 는 httpd2.4.12.tar.gz 를
apache 는 httpd2.4.12.tar.gz 를 컴파일해서 설치했습니다.
그리고 제가 혹시 openssl rpm 을 잘못다운 받은것일까요?
openssl-version.rpm 안에는 libssl.so 파일이 없어서 안되는 걸까요?
매번 답변해주셔서 감사합니다.
맘같아선 찾아뵙고 뭐라도 대접하면서 질문드리고 싶네요ㅠㅠ
첨부파일을 확인해주세요.
감사합니다
openssl.so 는 빌드할 때 link 시에
openssl.so 는 빌드할 때 link 시에 필요한 것이고, 실행시에는 libssl.so.버전 파일을 찾습니다.
일단, centos 6 을 설치하신 것이 맞나요? /opt 에 풀어놓은 openssl이 centos 6용이 맞나요? 일단 파일 이름을 봐서는 centos 6용이 아닌 것 같습니다만..
/opt/openssl-heartbeat/usr/lib64/libssl.so.1.0.1e
/opt/openssl-heartbeat/usr/lib64/libssl.so.10
파일이 존재 하는지요? 일단 ldd 결과로 보면 openssl rpm package가 의심스럽네요 :-)
예를 한번 들어 보겠습니다. (일단 제 시스템에서의 예이고, Centos 6 최신버전 기준입니다.)
위의 설명을 보시면 이해를 하실 수 있을 겁니다. LD_LIBRARY_PATH는 기존의 library link를 다른 위치의 파일로 변경을 해 줄 수 있는 것입니다. 다만, library file 이름과 library soname이 동일해야 linking이 제대로 동작을 한다는 점입니다.
그렇기 때문에 Library 경로를 hooking 하기 위해서는 hooking할 library가 기존에 link된 것과 동일한 환경에서 빌드된 것이어야 한다는 것입니다. 그러므로 CentOS 6 64bit를 설치 하셨다면, CentOS 6의 64bit openssl의 다른 버전을 찾아서 위와 같아 하시면 되는 것입니다.
해결하였습니다. openssl rpm 을
해결하였습니다.
openssl rpm 을 잘못다운받은게 원인이였네요....
답변 정말 감사해서 그런데 혹시 메일이라도 남겨주시면 기프티콘이라도 보내드리고 싶습니다.
항상행복하시길 바랄게요^^
마음만 감사하게 받겠습니다. :-)
마음만 감사하게 받겠습니다. :-)
혹시 어떤 버전을 설치하셨는지 여쭤봐두 될까요?
저도 꽤 애먹고 있습니다 ㅜㅜ 혹시 어떤 버전을 설치하셨는지 여쭈어봐도 될까요
hearbleed bug가 있는 버전을 말씀 하시는
hearbleed bug가 있는 버전을 말씀 하시는 거가요? CentOS 6.5의 openssl-1.0.1e-16.el6_5.7 이 fix 된 버전 입니다. 그러므로 이 이전 버전을 받으시면 됩니다. centos 6이라면
x86 용:
http://vault.centos.org/6.5/updates/x86_64/Packages/openssl-1.0.1e-16.el6_5.4.i686.rpm
x86_64 용:
http://vault.centos.org/6.5/updates/x86_64/Packages/openssl-1.0.1e-16.el6_5.4.x86_64.rpm
정도를 사용하시면 될 겁니다.
이미 해결되서 다행이지만, 다음번에 같은 작업을 해야
이미 해결되서 다행이지만, 다음번에 같은 작업을 해야 한다면.... 이런거 한번 써보시면 좋을 것 같습니다. :)
https://github.com/arthurnn/heartbleed-docker
---------------------------------
제일 왼쪽이 저입니다 :)
좋은 정보 감사합니다
뭔지 궁금해서 써봤는데 뭔지 잘모르겠네요;;
그냥 Monitoring 하는건지 아니면 heart bleed 공격 하는건가요??
localhost:9099 에 아무것도 안떠서요 ㅎㅎ
도커라고 하는 컨테이너 패키지 입니다. 가상 머신과
도커라고 하는 컨테이너 패키지 입니다.
가상 머신과 비슷한 개념인데, 가상 머신에 비해 굉장히 작은 크기가 특징입니다.
올려드린 링크는 heartbleed 를 설정해놓은 도커 패키지입니다.
무언가를 테스트하기 위해서는 happy 님이 하셨던 작업과 같이 처음부터 시스템을 구성하는 것이 보통입니다.
하지만 만약 누군가가 필요한 시스템을 가상머신 패키지로 만들어 놓고 공유해놓았다면, 이런 수고 없이 그냥 그 패키지만 다운 받아서 가상 머신으로 돌리면 돼겠지요.
도커는 이런 가상머신 패키지에서 꼭 필요한 내용들만 뽑아서 만든 시스템입니다.
가상 머신에 비해 크기가 엄청나게 줄어들지요.
아래에 도커와 관련된 내용들을 링크 걸어놨습니다.
한번 읽어보시고 써보시면 신세계를 만나실 겁니다. ㅎㅎㅎㅎ
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
http://www.slideshare.net/pyrasis/docker-fordummies-44424016
도커(Docker)에 관련된 한글 문서를 정리한 메타 문서
https://github.com/remotty/documents.docker.co.kr
---------------------------------
제일 왼쪽이 저입니다 :)
자세한 설명 감사합니다
링크 정독해야겠군요 ㅎㅎㅎ
신기한게 정말 많은거같아요
감사합니다^^
댓글 달기