리눅스 기본 명령어 정리

Posted by ironmask84
2017. 7. 7. 10:08 나는 프로그래머다!/Linux


리눅스에서는 많은 명령어를 지원합니다.
저도 아직 배워가는 단계로 부족한게 많아요 ㅎㅎ
혹시 보시고 이상한게 있으면 댓글로 알려주세요~~


명령어 기초편

하위폴더 및 모든 파일을 복사하기
cp -rf ./../../mh.bae/VS950/vs950_ics_git/svlte_modem/ .  

하위폴더 및 모든 파일을 지우기
rm -rf svlte_modem

ls -l => 좀 더 구체적인 정보 제공(파일형태와 사용권한, 하드링크번호, 소유자, 그룹, 파일크기, 시간, 연도, 파일명)

file 파일명 => 파일의 정보 보여줌

경로명 쓰다가 Tab 2번 하면, 뒷경로 자동 완성

cd ../폴더명 => 상위로 갔다가 폴더명의 하위폴더로 이동

mkdir -p 경로명 =>  하위경로명으로 depth를 길게 해서 만들 경우, 없는 폴더가 있으면, 알아서 확인해준다.


자주 사용할만한 명령어

0. Screen 걸어놓기 (터미널 창 닫아도 됨)

-> screen -R 설정할이름

    screen 창 에서 실행할 명령어 수행시킴

    ctrl + A + D 로 screen 빠져나감

    screen -list 목록에서 확인

    list목록에서 숫자가 붙은 full name을 복사해서 screen -R 이름 으로 다시 들어갈 수 있음.

    exit 로 screen 빠져나가면 됨.

    

1. find 로 이름 기준 검색하기

ex) find . -name '*webidl*'


2. grep 으로 파일내 특정 단어로 검색하기

-> grep -wrns "검색어" *

(*는 모든 파일에서 찾겠다는 것임.  , 옵션은 하위폴더 등등 으로...)


3. repo forall -c git clean -xdf  클린


4. fuser -m 디렉토리 및 파일명 --> 해당 path에 rw시도중인 pid 알려줌

   위 명령어에서 검색된 pid를 가지고,

   ps | grep pid명  --> 해당 pid 정보


5. 압축하기 :   tar -cvzf 파일이름 압축할파일 혹은 /디렉토리

   압축풀기 :   tar -xvzf 파일이름  


많은 소스파일을 인덱싱해서 편리하게 파악하는 방법 (Source Insight 같은 기능)

ctags -R => 현재 폴더 하위까지 범위로 해서 tags 파일 생성

(리눅스코드는 ==>ctags -R --language-force=c++)

---> vim 으로 tags가 있는 폴더에서 해당 폴더나 하위폴더의 파일들을 vim으로 열면, 

        ctrl + ] : 정의 따라가기

        ctrl + T : 되돌아가기

        ctrl + W + F : 헤더파일 따라가기

        vim -t 함수명 : 함수명있는 곳으로 tag jump  (set cst, set tag+=/경로명/tags  를 .vimrc에 추가해야 가능)




========================================================================

명령어 응용편

df

하드 디스크의 용량이 얼마나 남아 있는지 확인하는 명령어

-a : 디폴트로 생략된 0 브록 크기의 파일 시스템도 보여줌

-i : 파일 크기를 블록 대신 inode 디스크 정보를 보여줌

-k : 파일 크기를 킬로바이트(kb) 보여줌

-T : 파일 시스템의 종류와 디스크 정보를 보여줌

-t : fstype 값을 가진 파일 시스템에 대한 디스크 정보

-h : 쉬운 용량 표시 단위로 표기( : 1G 250M 1K)

 

ps

작동중인 프로세스 상태 체크하기

-l : 포맷으로 출력

-u : 실행한 유저와 실행 시간을 표시

-j : "job"형식으로 표시

-s : 시그널(signal) 포맷으로 표시

-m : 메모리 정보 표시

-a : 다른 유저의 프로세스 현황 표시

-x : 터미널 제어없이 프로세스 현황을 표시

-ef : 가장 많이쓰는 옵션이죠 ^^

 

kill

실행중인 프로세스를 재활성화하거나 완전히 죽이고자 쓰이는 명령

-1, -HUP : 프로세스를 재활성화함

-9 : 프로세스를 강제로 죽임

 

로그인 화면 바꾸기

/etc/issue -> 콘솔접속시(로컬)

/etc/issue.net -> 원격접속시

/etc/motd -> 로그인 성공시

/etc/rc.d/rc.local -> 부팅시

 

RPM 패키지 설치 확인 설치 경로 확인하기

rpm -qa 패키지명 -> 설치 확인

rpm -ql 패키지명 -> 설치 경로 확인

 

시스템 사용자 보기

현재 시스템에 어떤 사용자가 접속되어 있는지 확인하려면  w, who, finger  명령을 실행하면 된다.

 

커널 메시지 보기

dmesg, cat /var/log/dmesg, cat /var/log/messages

 

사용중인 커널 버전 알아보기

uname -r , uname -a

 

최신 커널 버전 벙보 알아보기

finger @finger.kernel.org

 

시스템 하드웨어 정보 보기

cat /proc/cpuinfo -> CPU

cat /proc/meminfo -> Memory

cat /proc/interrupts -> interrupts

 

작동중인 커널 모듈 확인하기

/sbin/lsmod 명령을 실행

 

패킷 전달 과정 체크

traceroute

 

NTFS 모듈 설치하기

페도라 코어에서는 윈도우 NT 계열의 파일 시스템(NTFS) 지원하지 않으므로, 윈도우 엑스피 파티션을 마운트하려면 ntfs모듈을 설치해야 합니다.

yum install ntfs-3g

 

badblocks 이용한 하드 디스크 불량블럭 검사

badblocks -s /dev/sda

 

업데이트된 커널 소스 설치

yum install yum-utils

yumdownloader --source kernel --enablerepo updates-source


========================================================================

** adb shell 기준

1. cat /proc/kmsg > /persist-lg/kmsg.txt   <== kmsg를 /persist-lg/kmsg.txt 에 저장

2. logcat > /persist/log.txt       <== Android log를 /persist/log.txt에 저장

3. ps -aux | grep 프로세스명 <= 해당 프로세스의 정보를 보여줌

   pstree <= 현재 실행중인 프로세스를 tree로 보여줌 (부모-자식 관계)

4. adb 안될때, 

    adb devices

    adb kill-server

    adb start-server

    또 안되면 재부팅

5. kill -9 PID

    kill -l  <= signal 번호가 나온다??

6. logcat & => &을 옵션으로 두면, 해당 명령이 죽지않고, 백그라운드에서 돌게된다.

7. prop 파일 내용 수정해서 적용하기

단말에 존재하는 system/build.prop

Cmd> adb root

Cmd> adb remount

Cmd> adb pull system/build.prop

Cmd> 다음과 같이 수정함

ro.product.model=LG-F180L

ro.product.manufacturer=LGE

Cmd> adb push build.prop /system/

Cmd> adb reboot

 

[구글 애드센스] #1 계정 복구 시 (잘못된 전화번호)

Posted by ironmask84
2017. 6. 28. 23:45 블로깅/블로그 팁



구글 애드센스를 알게된 것은 2009년 이었고..

실제 적용해본 것은 2010년쯤 이었던 것 같으나..

블로그 관리도 못했고 제대로 손을 못봐서 매우 실적이 부진 했었습니다.


그러다 올해 애드센스에서 휴면으로 들어간다는 메일이 왔고,

다시금 복구해서 살려 도전해보고자 애드센스 사이트로 접속!!

그런데..  갑자기 전화번호 인증을 하려는데 계속 잘못된 전화번호라는 오류메세지가.. ㅜㅜ

이리저리 검색도 해보고 생각해낸 방법은 일단 지메일에 개인정보에 나오는 번호를 한번 살펴보자는 것이었습니다.

거기서 힌트를 얻은 것이 똭! 앞에 국가번호인 82를 붙여야 겠다는 감으로 넣어봤으나 안되었는데..

"+" 가 붙어있네요.....  이거다! 해서 +821012341234 형태 입력해서 했더니 잘 되었습니다. ^^


하지만, 3일 정도 걸릴 수 있다는 ㅡ_ㅡ...

잔고에 $0.26는 7년전에 적용했던 것이 어영부영 지지부진 하다가 얻게된 결과 ㅜㅜ

================= 2017-06-29 기록 ======================

하루만에 승인이 되었네요!! ^^


 

HDD와 SSD 속도 측정하기

Posted by ironmask84
2017. 6. 28. 17:54 Excellent Tips


3년전에 5년된 PC를 (현재는 8년 ^^;) 업그레이드 해보고자..
SSD를 구입했습니다.
하지만.. 문제는 좀 더 알아본 결과... 

SSD가 제 속도를 내려면..  
메인보드에서 Sata3를 지원해야하며..  
더욱 개선해주는 AHCI 기능이 제공되어야 합니다 ㅠㅠ

저의 PC가 꽤 오래되다보니.. Sata2까지만 지원을 하고 AHCI 기능도 없더군요...
도시바 Q씨리즈 256GB 짜리가 당시 가격이 많이 내려서 구입했지만 성능은 ㅜㅜ

가지고 있는 노트북에도 SSD인데 부팅이 3초? 정도 인데
데탑에 설치한 이녀석이 제 성능을 못내서 부팅 시간이 많이 개선되지는 않았네요..

각설하고.. 속도 측정을 위한 프로그램을 소개합니다 ^^

CrystalDiskMark 라는 벤치마킹 프로그램 입니다.
다운로드 : http://crystalmark.info/download/index-e.html

사용방법은 무지 간단합니다.

아래 사진으로 대신하겠습니다. ^^


 320기가 5400rpm WD하드디스크 


 1TB 7200RPM 삼성하드디스크 


 256GB 도시바 SSD (제 성능이 안나오는 안타까움.. ㅜㅜ) 



Seq: 순차 읽기/쓰기 성능. 큰 파일 복사 성능

512K: 중간 정도 크기의 파일 읽기/쓰기 성능. 

4K: 작은 파일 읽기/쓰기 성능. 부팅 및 프로그램 실행 속도 성능 관련

QD32: Queue를 32개 걸고 진행 즉, 32개의 파일을 동시에 읽고 쓰는것. 


4버전에서는 512K가 사라지고 4K Q32 T1/T8이 등장했고, 5버전에서는 Seq Q32가 등장했는데, 이는 NVMe 성능 특성에 따른 요구로 변경된 사항입니다.




 

2014년 대륭포스트타워6차 옥상 전망

Posted by ironmask84
2017. 6. 14. 17:41 취미생활/풍경 사진


3년전 쯤.. 이때 당시 저는 대륭포스트타워 6차 빌딩에서 근무 중 이었습니다...

가산디지털단지역 바로 옆에 있는 빌딩이구요..

열심히 업무를 하다가 바람쐬러 나와서 몇 컷 찍었습니다.. 

폰카로 찍었지만 나름 화질이 좋네요.. 

LG G2폰 카메라인데 아마 800만 화소 카메라였던 듯...

맑은 날씨여서 사진찍기 좋았습니다.


클릭하시면 확대되서 보여요 ^^


구로로 이어지는 전철과 남구로 일대가 보입니다.. 저기 넓적한게 고대구로병원인듯...


날씨가 맑을 땐 이렇게 63빌딩과 남산타워도 어렴풋이 보여요!


남구로 일대... 주택들이 엄청나게 붙어있습니다.. 저 도로를 지나가는 교통량도 어마어마함...



 

2014년 마라톤 - 국민건강마라톤

Posted by ironmask84
2017. 6. 14. 16:45 취미생활/마라톤


사실 2010년 부터 2015년 까지 매년


11월말 혹은 12월 첫째주 토요일에 개최되는 국민건강마라톤에 참여하였습니다.


결식아동돕기라는 명목도 있기에 참가비를 내면서도 나름 뿌듯합니다.


항상 5Km 코스로 했고, 기록은 5년동안 거의 30분 내외로 비슷했네요..


왜 변화가 없었을까.. ㅋㅋㅋ  이때만 5Km 열심히 뛰기 때문 ㅋㅋ



2016년은 제가 참석할 몸 상태가 아니었기에 ㅠㅠ


2017년에 다시 참석하는 저를 기대하고 소망합니당



그동안의 사진들이 어딘가에 있을텐데...


우선 찾게된 2014년 1장이 있어 올립니당


현장의 사진사가 찍어서 올리는 사진인데


공짜샘플사진이라고 글자삽입으로 사진이 엉망이네요 ㅠㅠ


매해 느끼지만 여성마라토너에게 추월당하거나 따라잡지 못할때의 기분이란....


매해 체력증진, 몸단련을 꿈꾸지만 현실은 쉽지 않네요...ㅋㅋ



2017년엔 27분 이내를 꿈꾸며!!



'취미생활 > 마라톤' 카테고리의 다른 글

2010년 첫 마라톤!  (0) 2012.12.19
 

수영 훈련 기록 #1 - 자유영 50m 한 번에 달성!!

Posted by ironmask84
2017. 5. 25. 00:51 생각과 일상/오늘의 일상


올해 2월부터 집 근처 체육센터에 수영을 배우러 다녔습니다.

약15년 전 쯤에 3개월 수영을 배운 적이 있긴 했었습니다만, 
의지도 좀 약했던 때라 그런가 평영까지 진도가 가긴했는데 실력이 잘 안늘었던 기억이 있습니다..^^;

그 후에 군대를 해군으로 가게 되어서 수영 훈련 측정을 받을 때에도..
3개월 배운 실력 발휘를 못하고 안좋은 결과를 받았던 아픈 기억이 ㅠㅠ

이러저러한 이유로 수영을 제대로 한 번 꼭 배우고 싶었는데,
올해 마침 시간적 여유가 생겨서 4개월째 수영을 배우고 있네요.
정확하게는 보름 정도 넘게 참석을 못한 시기가 있어서 3개월 반정도 라고 볼 수 있습니다.

진도는 평영이 끝나는 시기 쯤이어서, 제곧내 접영을 들어갈 수 있을 것 같네요.

아무튼! 서론이 길었지만, 이렇게 첫 수영 훈련 기록을 쓰게된 이유는!!
드디어 50m레인을 한 번에 쉬지않고 자유영으로 돌파했기 때문입니다. ㅋㅋ

배운 개월 수에 비해 습득이 저조할 수도 있지만,
50m의 벽은 높아만 보였습니다.
항상 30m, 35m 쯤 되면 다리에 힘이 부치고, 숨이 너무차서 도중에 멈춰서곤 했었는데,
지금 12시가 넘어갔으니 정확히 어제! 2017년 5월 24일에 한 번에 뙇! 돌파를 한 것이죠.

별 것 아니지만 정말로 통쾌하고 기뻤습니다.
그 동안 다리를 너무 많이 저었던게 문제였나 봅니다.
리듬만 좀 잘타면 다리를 조금 저어서도 자유영이 가능해서 숨이 덜 차서 50m가 가능했던 것 같네요.

배영은 조금 재미없어서 연습을 안하게 되고...
평영은 재밌게 하고 있는데, 아직 속도가 많이 뒤쳐지는 상태..

6월까지만 수영을 배울 수 있을 것 같아서,
미숙하더라도 얼른 접영을 익히고 싶은 마음이 굴뚝같네요.

접영을 익히는 때 다시 수영 훈련 기록 #2 는 이어질듯 합니다... ^^



 

삼성합병 논란 특검 구형 1호

Posted by ironmask84
2017. 5. 22. 19:59 생각과 일상/사회이슈 및 생각


드디어 기대했던 비열하고 부정한 삼성합병 논란에서 법의 심판을 받기 위한 건수가 1개 나왔습니다.
연합뉴스 기사는 아래와 같습니다.
http://www.yonhapnews.co.kr/bulletin/2017/05/22/0200000000AKR20170522088500004.HTML?input=1195m

예전에 이와 관련된 포스팅을 한 바 있습니다.  --> http://ironmask84.tistory.com/308

비록 구형이긴 하지만, 잘못이 확실하다면 실형으로 법의 심판을 받아야죠.

2년 전 삼성 회장자리를 이재용씨에게 승계하기 위한 의도가 매우 다분한 삼성물산과 제일모직을 합병 사건이 있었습니다.
이 때, 합병 찬성의 결과로 이끄는 결정적인 역할을 대주주였던 국민연금관리공단 한 바 있습니다.
문제는 합병 찬성을 하게되면 국민연금관리공단이 1000억원대의 손해를 보게되었다는 것입니다.
사실 들리는 소문에 의하면 1000억원이 아니라 5000억원도 넘을 수 있다는 얘기가 있습니다.
그리고 이 국민연금의 돈은 전 국민에게 돌아가야할 국민 쌈짓돈인데, 이것을 재벌총수가 가로챈 결과가 된다는 것은
너무나 어처구니 없고 격분하게 만드는 일입니다.

이번 7년 구형은 문형표 전 보건복지부 장관이 국민연금관리공단에 찬성하도록 압력을 가했다는 것입니다.
아마도 압력을 가하고 박근혜 정부에 큰돈이 들어오지 않았을까 조심스레 추측을 해봅니다.
그리고 홍완선 전 기금운용본부장도 그 압력에 동의했다는 것에 당연한 심판의 결과로 구형 7년을 받게 되었습니다.

이러한 범죄의 결과가 정확하다면
구형으로 끝나는 것이 아니라, 정당한 법에 의해 실형이 선고되어야 할 것입니다.

그리고 삼성전자 부회장 이재용씨에게 타당한 법의 심판의 결과가 있어야 할 것입니다.


추가로 8월 7일에 이재용 부회장 징역 12년 구형 및 전직 임원 4명 징역 10~7년 구형 되었다고 합니다.

 

디자인패턴

Posted by ironmask84
2017. 4. 1. 15:06 나는 프로그래머다!/기초 다지기


  • 생성 디자인 패턴
    • 싱글톤패턴
      • 어떤 클래스의 인스턴스 개수가 최대 한 개를 넘지 않도록 하는 패턴
      • 이 하나의 인스턴스는 공유자원에 대한 문지기 또는 중앙에 있는 소통의 중심 역할을 한다.
      • 애플리케이션에서 새 인스턴스를 만들 수 없으며, 모든 메소드는 싱글톤을 통해서만 액세스할 수 있다.
      • 애플리케이션에서는 클래스에 있는 정적 메소드를 호출하여 싱글톤을 가져온다.
      • 상속과 인터페이스(싱글톤은 객체다. 따라서 베이스 클래스로부터 상속을 받고 인터페이스를 구현할 수 있다.)
      • 다수 객체로 전환 가능(나중에 마음이 바뀌어 여러 객체를 만들고자 하는 경우에 코드를 많이 바꾸지 않고도 원하는 바를 이룰 수 있다.)
      • 동적 바인딩(싱글통을 생성하기 위해 실제로 사용하는 클래스를 컴파일시가 아닌 실행시에 결정할 수 있다.)
      • 싱글턴 패턴을 구현 할 때는 private 생성자와 정적 메소드, 정적 변수를 사용한다. 

 

 public class Singleton {

1
2
3
4
5
6
7
8
9
 private static Singleton uniqueInstance;
 
 private Singleton(){} //다른 클래스에서 new키워드를 사용할 수 없게 된다.
 public static Singleton getInstance(){  //그래서 getInstance()를 사용할 수 밖에 없다.
  if(uniqueInstance == null){
   uniqueInstance = new Singleton();
  }
  return uniqueInstance;
 }


 

  • 빌더패턴
    • 객체가 어떤 식으로 구축되는지에 대해 모르는 상황에서 단계별로 객체를 생성하는 패턴이다.
    • 객체를 직접 구축하는 대신 빌더의 인스턴스를 만들고 빌더에서 객체를 직접 구축하는 대신 빌더의 인스턴스를 만들고 빌더에서 객체를 대신 만들도록 하는 방식이다.
    • 객체를 초기화하는 데 여러 생성자 매개변수가 필요한 경우, 그 중에서도 특히 동일 또는 유사한 유형의 매개변수가 여럿 필요한 경우에 특히 이 빌더 패턴이 유용하다.
    • 빌더패턴 예시

 

 적용 전

 적용 후

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Window{
 
     public Window(bloolean visible,boolean modal,boolean diaog){
 
         this.visible=visible;
 
         this.modal=modal;
 
         this.dialog=dialog;
 
     }
 
 
 
    private boolean visible;
 
    private boolean modal;
 
    private boolean dialog;
 
}


  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class WindowBuilder{
 
 
 
   public WindowBuilder(){}
 
   
 
   public WindowBuilder setDialog(boolean flag){
 
  
 
        dialog=flag;
 
        return this;
 
    }
 
   public WindowBuilder setModal(boolean flag){
 
  
 
        modal=flag;
 
        return this;
 
    }
 
   public WindowBuilder setVisible(boolean flag){
 
  
 
        visible=flag;
 
        return this;
 
    }
 
   public Window build(){
 
         return new Window(visible,modal,dialog);
 
    }
 
    private boolean visible;
 
    private boolean modal;
 
    private boolean dialog;



 

Secure 코딩과 기본해킹 3가지 기법

Posted by ironmask84
2017. 3. 27. 11:53 컴퓨터공학/Security




1. Secure Cording
SW개발과정에서 개발자 실수, 논리적 오류 등으로 발생하는 취약점을 최소화하는 보안활동
좁게는 소스코드 구현단계에서의 활동이고,
넓게는 SW 개발생명주기 SDLC 의 각 단계별 요구되는 보안활동이 모두 포함됨

1) 입력데이터의 검증

가) SQL Injection
DB와 연동된 웹 어플리케이션에서 입력되는 데이터에 대해 유효성 검증을 하지 않을 경우,
공격자가 입력폼에 SQL문을 삽입하여 DB로부터 정보를 조회하거나 조작하는 취약점

DB와 연동되는 입력값들에 대해서는
SQL 쿼리문관련 특수문자나 SQL명령어들을 필터링 하도록 코드 구현함으로 해결
(ex) ' or 1=1 #  을 통해 TRUE 값 만들수 있음)

나) XSS (크로스 사이트 스크립트)
웹페이지에서 악의적인 스크립트를 포함시켜 사용자 측에서 실행되도록 유도하여 정보 유출 등의 공격 유발

스크립트 종류
Client Side : JavaScipt는 Client측에 다운로드 되어서 브라우져에서 수행
Server Side : JSP, ASP, C#, PHP 등

- 스크립트의 코드 중에 서버에서 값을 받아오는 부분에 대해서는 해당 값에 대해 문자변환 함수나 메소드를 이용하여
유효성 검증을 함으로 해결
- HTML 태그를 허용하는 게시판에서는 White List 선정후 해당 태그만 허용 (Script 태그 금지 등)

2) 보안기능
인증, 접근제어, 기밀성, 암호화, 권한관리 등을 적절하지 않게 구현시 발생하는 취약점

가) 중요 자원에 대한 잘못된 권한 설정
password와 같은 중요자원에는 관리자에 의해서만 read/write 되도록 설정한다.

나) Cross Site Request Forgery (사이트 간 요청 위조)
사용자 자신의 의지와 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격
사용자의 인증 없이 정보에 접근하거나 위조가 가능해진다.

중요한 정보를 처리하는 웹페이지에서는 사용자 재인증 작업을 거치도록 한다.
(코드상에서 ID/Password를 다시 입력받게해서 기존 session의 ID/Password를 비교하도록 한다.)

3) 시간 및 상태
데드락(dead lock)나 자원에 대한 경쟁조건(race condition)과 같이
프로그램 동작과정에서 프로세스 혹은 쓰레드나 시스템 상태에 대한 정보(자원잠금, 세션정보)에 관련된 취약점을 말한다.


가) 경쟁조건(race condition)
한 자원에 대해 동시에 여러 프로세스 혹은 쓰레드에서 접근을 하려고 하면,
동기화 문제가 발생할 수 있고, 
이를 임계영역에 대한 처리를 해서 해결하지만, 잘못 처리하면 데드락이 발생할 수 있다.


4) 에러처리 
에러를 처리하지 않거나, 불충분하면 에러정보에 중요 시스템 정보가 노출될 수 있는 취약점
ex) java에서 e.printStackTrace()와 같이 디버깅 정보를 보여주는 건 개발 때 사용하는 것으로 상용 땐 위험
    그래서 대신 따로 에러메세지를 출력하도록 하고, 내부적인 예외상황은 로그로 따로 저장하도록 구현해야 함

5) 코드오류
메모리의 부적절한 반환 등 개발자의 코딩오류로 인해 유발되는 취약점
Null이 될 수 있는 레퍼런스는 참조하기 전에 널 값인지 검사하도록 한다.

6) 캡슐화
중요한 데이터를 불충분하게 캡슐화하면, 인가되지 않은 사용자에게 데이터 노출이 가능해지는 취약점
멀티 쓰레드 환경인 java 서블릿 등에서는 정보를 저장하는 멤버변수가 포함되지 않도록 하여
서로 다른 세션에서 데이터를 공유하지 않도록 해야한다.



* 아래는 http://ironmask.net/261 참조

2. Race Condition

3. Buffer Overflow

4. Format String

 

웹보안 관련과 OWASP 2013 그리고 2017

Posted by ironmask84
2017. 3. 27. 11:51 컴퓨터공학/Security




국내 웹 취약점 진단기준 : 국정원 10대 취약점, KISA 제시 취약점, 행안부 제시 43개 시큐어 코딩 진단기준
--> CVE, CWE, OWASP 에서 나온 문서들을 참고한 것이다.

1. CVE(Common Vulnerabilities and Exposures) : http://cve.mitre.org , CVE-연도-순서 순의 포맷으로 목록화

2. CWE(Common Weakness Enumeration) : http://cwe.mitre.org , 다양한 언어의 소스코드 취약점 목록화

3. OWASP(Open Web Application Security Project) : https://www.owasp.org/index.php/Main_page
--> 웹어플리케이션에 대한 취약점 Top 10 목록화

4. KISA 점검기준 : http://www.kisa.or.kr/public/laws/laws3.jsp

5. 행정안전부 시큐어코딩 항목 : http://www.mospa.go.kr/


OWASP 2013에 대표적 3가지

1) SQL Injection
   - 유형별
      ㄱ) Error Base SQL Injection : SQL시스템에서  error 리턴시, 그 정보를 이용하여 취약점 찾음
      ㄴ) Blind SQL Injection : 쿼리의 참과 거짓을 통해 데이터 추출
   - 공격방식별
      ㄱ) Form SQL Injection : 입력폼에 쿼리문 Injection
      ㄴ) Union SQL Injection : union select 쿼리문 이용하여 한 쿼리의 결과를 다른 쿼리의 결과에 접합
      ㄷ) Stored Procedure SQL Injection : 일련의 쿼리를 함수처럼 실행
      ㄹ) Mass SQL Injection : 한 번의 공격으로 대량의 DB값이 변조 (악성스크립트 이용)
   - 대안
     ㄱ) DB와 연동되는 스크립트의 모든 패러미터 유효성 검증, SQL 특수문자 필터링
     ㄴ) 입력 문자열 길이 제한

2) XSS (cross site script)
   - 유형별
      ㄱ) Stored XSS - 웹서버내에 DB에 악성스크립트가 저장 - 게시판, 방명록 등에서..
      ㄴ) Reflected XSS - 악성스크립트가 공격사이트가 아닌 다른 사이트에 있는 경우
   - 대안
      ㄱ) 사용자 입력값은 반드시 서버단에서 검증 (특수문자는 변환함수로 치환)
      ㄴ) 게시판에서 HTML 태그 허용시, White List 선정후, 해당 태그만 허용 (Script 태그는 금지 등)

3) CSRF 공격 (cross site request Forgery)
웹어플에서 정상적 경로 통한 요청과 비정상 결로 통한 요청을 서버가 구분하지 못할 경우에,
공격자가 스크립트 구문 이용하여, 정상 사용자로 하여금 조작된 요청을 전송하도록 하여
설정 및 정보 변경시키는 경우
   - 대안
      ㄱ) Get 보다는 POST 방식 사용 (Get은 url에 sql문이 노출?)
      ㄴ) 중요기능에는 세션검증과 재인증을 유도한다.



새롭게 TOP 10 에 추가된 3개 항목은 다음과 같습니다.

1. XML External Entities (XXE) 

XXE 라고 부르는 'XML 외부 엔터티' 취약점은 XML 문서의 DTD 구조 정의 시 Entity 항목을 설정할 수 있을 때 발생하는 취약점 입니다.

XML 문서는 마치 변수를 선언한 것 처럼 Entity를 선언하여 사용 할 수 있는데, Entity 선언 시 외부 리소스로 선언이 가능합니다.

아래 코드와 같이 외부 파일, 가령 운영체제의 계정 정보가 기록된 passwd 파일을 외부 엔터터로 선언하고 XML 문서 내에서 '&엔터티명'을 호출하면 해당 파일 내용을 핸들링 할 수 있습니다.

<?xml version="1.0" encoding="ISO-8859-1"?>

 <!DOCTYPE foo [<!ELEMENT foo ANY >

 <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>

 <foo>&xxe;</foo>

참고로 일반적으로 마크업 문서에서 <, > 대신 사용하는 &lt, &gt 는 기본적으로 선언된 Entity 입니다.


2. Insecure Deserialization

Javascript 를 비롯하여 여러가지 개발 언어에서 여러가지 이유로 데이터 혹은 객체를 전송할 때 직렬화(Serialization)을 수행하게 됩니다. 가령 특수 문자나 공백등의 구분자가 포함되어 있다던가, 바이너리 데이터를 전송할 필요가 있다던가 URL 호출로 직접 데이터를 전송 할 경우 일반적으로 사용합니다.

이렇게 serialization 된 정보 전송 시 별도의 무결성 검증이나 암호화를 수행하지 않을 경우 프로그램에 영향을 줄 수 있는 악의적인 정보를 전송할 경우 원래 데이터로 복원하는 Deserializtion 시 문제를 발생시킬 수 있습니다.


3. Insufficient Logging & Monitoring

악의적인 공격 징후에 대한 로그를 남기지 않거나 로그를 기록하더라도 모니터링을 수행하지 않으면 지속적인 공격의 대상이 될 수 있습니다.

공격의 징후 (가령 대량의 포트 스캐닝, Brute force 공격 등)에 대한 로그 기록과 지속적인 모니터링을 통해 공격 징후를 파악하고 사전에 공격을 차단할 수 있도록 방비해야 합니다.

[출처] OWASP TOP 10 2017 릴리즈|작성자 강군



2013 버전과 비교하면 몇가지 변경사항들이 좀 눈에 띄입니다. 특히 2013 버전에 있던 CSRF(크로스 사이트 요청변조)가 이번 버전에서 빠졌는데, OWASP 그룹에 따르면 CSRF는 13위에 랭크되어 이번 TOP 10 에서는 제외되었다고 합니다.



아래는 OWASP Top 10 -2017 관련 내용입니다.

처 : https://blog.naver.com/PostView.nhn?blogId=crehacktive3&logNo=221162402841&proxyReferer=https%3A%2F%2Fwww.google.com%2F


드디어 OWASP Top 10 - 2017 최종 버전이 공개되었습니다. 지난번 OWASP Top 2017 RC1 항목에 관해 포스팅을 하였는데 그때와는 다소 항목이 변경된 것을 아래 그림을 통해 알 수 있습니다. 이전 OWASP Top 10 - 2013 버전 보다 훨씬 더 직관적으로 항목이 변경되었으며, 최신 트랜드를 반영한 것을 알 수 있습니다.



OWASP Top 10 - 2013, OWASP Top 10 - 2017 항목 비교


아래는 본문 내용에서 발췌한 내용입니다.


데이터가 제공한 새로운 문제: 

- A4:2017-XML 외부 개체(XXE)는 주로 소스 코드 분석 보안 테스팅 도구(SAST) 데이터 집합에서 지원되는 새로운 범주입니다.


커뮤니티가 제공한 새로운 문제: 

우리는 커뮤니티가 지켜보고 있는 두 가지 취약점에 대한 통찰력을 제공할 것을 요청했습니다. 500개 이상의 개별 제출 및 민감한 

노출, XXE와 같은 이미 제시된 데이터를 제거한 후 다음과 같은 두 가지 새로운 문제가 있었습니다: 

- A8:2017-안전하지 않은 역직렬화는 영향을 받는 플랫폼에서 원격 코드 실행 또는 중요한 개체 조작을 허용합니다. 

- A10:2017-불충분한 로깅과 모니터링은 악의적인 활동 및 침입 탐지, 사고 대응 및 디지털 포렌식을 방해하거나 크게 지연시킬 수 

있는 결함이 있습니다. 


병합했거나 삭제됐지만, 잊지 말아야 하는 사항: 

- A4-안전하지 않은 직접 객체 참조와 A7-기능 수준의 접근 통제 누락은 A5:2017-취약한 접근 통제 항목으로 병합되었습니다. 

- A8-크로스-사이트 요청 변조 (CSRF)은 CSRF 방어를 포함한 많은 프레임워크에 있기 때문에 5%의 애플리케이션에서만 

발견되었습니다. 

- A10-검증되지 않은 리다이렉트 및 포워드는 약 8%의 애플리케이션에서 발견되었지만 XXE에 밀려났습니다

OWASP Top 10 - 2017(한글버전 PDF)

https://www.owasp.org/images/b/bd/OWASP_Top_10-2017-ko.pdf

OWASP Top 10 - 2017(영문버전 PDF)

https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf




 

네트워크 보안 관련

Posted by ironmask84
2017. 3. 23. 13:15 컴퓨터공학/Security


1. ARP Spoofing
: 논리주소(IP) -> 물리주소(MAC) 로 변환해주는 프로토콜인 ARP를 이용하여,
  ARP Request를 계속해서 보냄으로써 공격대상 통신장비에 ARP Cache Table에 저장되어 있는
  임의의 IP, MAC 주소를 자신의 주소로 변경시켜서, 통신데이터를 Sniffing 하는 공격
--> arp -s ip주소 명령어로 정적주소로 타입을 등록함으로 ARP Cache Table 변경을 막는 방법이 있다.

2. ping, traceroute
: ping은 TCP/IP방식의 3계층인 IP프로토콜의 신뢰할 수 없는 전송을 관리해주는 ICMP의 메세지 중
  echo request(type 8), echo reply(type 0)을 이용하여, 네트워크 속도 및 손실률을 검사하는 유틸이다.

: traceroute는 여러 중계 라우터 각 구간에 대한 네트워크 상태를 관리하는 유틸
  ICMP 메세지 중 Time Exceeded(Type 11)와 Destination Unreachable(Type 3)을 이용하고,
  IP헤더에 포함된 TTL(Time To Live) 을 이용한다.

3. ICMP Redirect 공격
:   ICMP Redirect는 라우터만이 보낼수 있는데, 이를 공격자가 자신이 라우터 인것처럼 보이기 위해 IP헤더에
    source ip를 라우터의 주소로 위조하여 보내고, 라우팅 테이블을 변조시킨다.
   보안상의 이유로 일반적으로 OS에서 ICMP Redirect 옵션을 기본적으로 해제한다.
   리눅스에서는 sysctl -w 명령어 이용

4. ifconfig eth1 promisc (2계층 스위치 관련): 자신에게 온 패킷이 아니어도 다 받는다. Sniffing 목적 

5. DNS Spoofing 공격 (DNS는 도메인명 -> IP주소 로 변경해주는 것)
: 희생자가 DNS 쿼리를 수행하면 공격자가 이를 스니핑하고 있다가 희생자 호스트에 위조된 웹사이트로 접속하는
  DNS응답을 보내 위조된 주소로 접속하게 만드는 공격이다. DNS는 UDP를 이용하므로 비연결이라는 특성의 취약점을
  이용하여, 트랜잭션ID만 일치하면 먼저 들어온 응답을 신뢰하는 특성 이용한 것
  --> 중요한 사이트는 hosts 파일에 등록하여, DNS응답보다 우선순위가 높은 hosts파일을 참조하도록 하여 해결 


** 참조 우선순위 : hosts파일 -> 호스트의 dns cache -> resolv.conf파일에 등록된 dns서버정보에 질의

6. DNS Cache Poisoning
: DNS서버의 캐시 메모리에 위조된 데이터를 저장하여 호스트는 이 위조된 정보를 사용하도록 유도는 방식의 파밍 공격
  해당서버에 접근하는 호스트들이 위조된 정보를 응답받으므로 피해가 크다.
  DNS서버가 질의를 받을때, 자신의 Cache에 해당 정보가 없으면 Root DNS서버부터 순환질의를 하는데,
  이틈에 해당 DNS서버에 공격자가 Cache에 정보를 먼저 업데이트 시켜버린다.
  --> DNSSEC 기술을 이용 (기존 DNS에서 공개키 암호화  기능을 추가 부여)
  --> named.conf 파일을 수정하여 재귀적 질의 제한, zone transfer파일 제한

7. DNS Lookup 하는 명령어 (도메인 -> IP주소)
   1) nslookup
   2) dig : nslookup을 대체하기 위함, 리눅스 및 유닉스 계열에는 기본 설치

8. DHCP : 동적으로 클라이언트의 네트워크 주소 (IP)를 설정하기 위한 프로토콜
   * DHCP Starvation 공격 : 할당가능한 IP를 모두 소진하게 만들어  IP할당이 불가능하게 하는 공격
     --> 서로다른 MAC주소로 대량으로 보냄 -> 이에대한 offer 오면 -> request메세지까지 보내고 실제로는 할당안함

9. DDOS : C&C서버(Command & Control)를 이용하여, Bot/좀비PC 들을 컨트롤하여, 타겟을 공격한다.
   ex1) DNS Query Flooding : UDP프로토콜 기반의 서비스를 제공하는 DNS에 대해 DNS쿼리 데이터를 다량으로 서버에
          전송하여 DNS의 정상적인 서비스를 방해
   ex2) TCP SYN Flooding : 공격자는 다량의 SYN패킷을 서버로 전달하여 서버가 새로운 클라이언트의 연결요청을
          처리하지 못함 (syn+ack 받고, ack를 보내지 않아서 처리되지 않은 정보를 계속 쌓이게 만든다.)
   ex3) HTTP Get Flooding : 공격자는 동일한 URL을 반복 요청하여 웹서버가 URL에 대해 데이터를 클라이언트에게 회신하기 위한 서버자원을 사용하도록 공격

10. DRDOS (Distributed Reflection DOS)
: 공격자는 출발지 IP를 공격대상의 IP로 위조하여 다수의 반사서버로 요청정보를 전송,
  공격대상은 반사서버로 부터 다수의 응답을 받아 서비스 거부상태가 됨

  * 공격근원지를 파악하기 어렵다. (출발지 IP를 변조하여, 공격트래픽이 수많은 반사서버를 경유하므로)
  * 좀비PC의 공격트래픽 효율이 증가한다. 반사서버는 syn+ack 패킷에 대한 응답이 없는경우 일정횟수 재전송을
    수행하기 때문에 공격자가 전송하는 syn패킷보다 몇배많은 syn+ack 패킷이 타켓에 전송된다.

** 해결방법
: IP주소가 위조된 패킷이 인터넷망에 유입되지 않도록 ISP가 직접 차단
  반서서버에게는 icmp프로토콜이 필요없는 시스템은 해당프로토콜을 차단




 

Linux 명령어와 시스템보안

Posted by ironmask84
2017. 3. 3. 18:23 컴퓨터공학/Security


1. ls (디렉터리, 파일 정보 출력)
-> 1) 파일종류, 접근권한  2) 하드링크수  3) 소유주  4) 소유그룹  5) 크기  6) 최종 변경일  7) 최종 변경시간  8) 이름

2. stat (i-node 속성정보 출력)
-> 1) i-node number  2) 파일타입  3) 접근권한  4) link count  5) 소유자  6) 소유그룹  7) 크기  8) MAC Time  
    9) Block Index
    ln source_file target_file : 하드링크 
    ln -s source_file target_file : 심볼릭링크 (소프트 링크)

3. find (파일 검색)
-> find path [expression] [action]
    1) find . -name "*.c" : 현재 디렉터리에서 파일명이 .c로 끝나는 파일 검색
    2) find . -size +56 : 현재 디렉터리에서 파일 크기가 56블록보다 큰 것을 검색
    3) find . -perm -664 : 현재 디렉터리에서 user와 group에 읽기 및 쓰기 권한, other에 읽기 권한이 있는 파일 검색
    4) find . -mtime +3 : 현재 디렉터리에서 파일을 수정한지 3일이 지난 것을 검색

4. touch : 0byte 파일을 생성 또는 파일의 시간을 변경

5. umask : 파일 생성 시 접근권한에 영향을 미침 (/etc/profile 에 적용, 개인은 .profile에 적용)

6. diff : 파일이 동일한지 여부를 검사

7. comm : 파일을 비교할 때 사용 (한쪽에만 있거나 양쪽 모두에 있는 행 출력)

8. grep : 파일 내 특정 패턴이나 문자열을 검색

9. ps : 시스템에 상주중인 프로세스 정보 출력
-> UID, PID, PPID, STIME(프로세스 시작 시간), TTY(프로세스가 연결된 터미널), TIME(CPU 사용시간), CMD(프로세스명)

10. 시그널 : UNIX 시스템에서 지원하는 소프트웨어 인터럽트, 프로세스간 통신수단
-> 1) 외부에 의해서 : 키보드 입력 (ctrl + c)
    2) (커널)에러에 의해서 : divde zero 오류, 메모리 참조 오류
    3) 이벤트에 의해서 : alarm() 함수, 프로세스 종료
    4) 인위적으로 : kill() 함수, kill 명령어 (kill -시그널번호 PID)
  * 주요시그널 : SIGKILL(9), SIGSTOP(23) 이 2가지는 무시나 핸들링이 불가능하므로 관리자가 해커를 막기위한 강력권한
  * 좀비프로세스 : 프로세스 수행을 종료했지만 부모 프로세스가 종료상태정보를 확인하지 않아서 소멸하지 않고
                        남아있는 프로세스
  * 고아프로세스 : 자식프로세스가 살아있는 상태에서 부모 프로세스가 종료하게 되면 자식프로세스는 고아프로세스 됨.

11. mount : 보조기억장치에 설치된 파일시스템을 UNIX시스템이 인식하도록 특정 디렉토리에 논리적으로 연결시킴

12. cron : 정기적 처리할 작업을 crontab명령으로 crontab파일에 저장, cron데몬 프로세스가 관리
              해커가 주기적으로 정보를 빼돌리는 데에 사용도 가능하다. -> crobtab 파일 관리 필요

13. /etc/passwd : account / password(x로표시) / user_ID / group_ID / comment / home_directory / login_shell
    /etc/shadow : account / encrypted_password / last_change / minlife / maxlife / warn / inactive / expires
      ** chage 명령어로 패스워드 Aging관련 설정을 할 수 있다. -> /var/log/secure파일에 로그가 남는다.

14. setuid, setgid (chmod ug+s)
   1) setuid, setgid 설정된 경우 -> RUID == EUID,  RGID == EGID
   2) setuid, setgid 설정되지 않은 경우
   -> RUID, RGID = 실행시킨 사용자의 ID
       EUID, EGID  = 실행파일 소유자의 ID (프로세스가 실행중인 동안에 접근권한을 판단하기 위한 ID)
* root소유의 실행파일에 setuid를 설정하면, ruid는 실행자의 id, euid는 root id로 설정이 된다. 
  따라서, 실행 프로그램 내에 euid 설정에 따라 root권한으로 접근하게 된다.

* sticky bit (chmod o+t)
-> 디렉토리에 설정이 되면, 파일의 생성은 자유롭게 할 수 있지만
    파일 삭제 및 파일명 변경은 파일소유자 또는 root만이 가능하다.



 

하이패스 단말기 명의변경!!

Posted by ironmask84
2017. 3. 1. 22:48 재테크/깨알꿀팁


중고차를 구입하면서 하이패스 단말기가 딸려왔습니다. ㅎㅎ

단말기를 본인정보로 등록해놓지 않으면, 
과금 시에 카드에 금액이 부족할 때 이전 소유주의 정보를 통해 연락이 가는 등 
번거롭고 정상적인 사용이 아니므로 본인으로 명의변경 해놓고 사용하는 것이 좋습니다.

혹시나 했는데, 제가 변경할 때 보니 차량번호부터 다르걸 보고는 이 차주인도 명의변경을 하지 않고
사용하고 있었구나 싶었어요 ㅋㅋ

하지만, 저는! 깔끔하게 변경하고 사용하기로 했습니다.
의외로 간단합니다. 아래 사이트에 접속하고 단말기 제조번호만 알면 됩니다.
www.e-hipassplus.co.kr

중고차에 딸려있던 단말기는 엠피온 SET-210이라는 2008년식 모델이더라구요..
꽤 오래된 모델이기도 하고, 첨엔 몰랐는데 버튼을 길게 누르면 음성으로 제조번호, 발행번호 등의 정보를 알려줍니다.ㅋ

1. 음성 듣고 잽싸게 번호를 메모해둡니다.
2. 그리고 www.e-hipassplus.co.kr 사이트에 접속합니다.
3. 명의변경 메뉴에서 제조번호를 입력하고 진행하면 됩니다. 





 

현 시대의 청년실업과 캥거루족

Posted by ironmask84
2017. 2. 20. 15:22 생각과 일상/사회이슈 및 생각


2~3년 쯤 전에 봤던 기사에서 본 그래프였던 것 같은데,
지금 생각나서 올려본다.

그래프를 보면 2010~2011년 대졸자라고 했으니, 
2~3년 전 쯤 당시 30살 정도 되는 인구들을 대상으로 했다고 보면 된다.

캥거루족이란 이미 독립할 나이가 되었지만, 부모님과 함께 거주하거나 따로 살지만 용돈을 받는 이들을 가리킨다.

사실 블로거 운영자도 이때 비슷한 나이였고, 독립은 한 상태였다.
근데 서울은 너무 집값, 땅값이 비싼 것이 문제다.

그래서 결혼을 하지 않은 상태이고, 직장이 부모님집과 같은 지역이면,
캥거루족 처럼 부모님과 같이 사는 것이 좋다고 생각한다. (특히, 서울..)

하지만, 캥거루족 중에서도 몇몇 분류가 나뉜다.
부모님으로부터 용돈을 받느냐 받지 않느냐 인데,
이 부분은 아래 그래프에서 알 수있다.
취업자이냐 비취업자이냐 에서 어느정도 예상이 된다.

위 그래프 표본인 나이 30살 정도의 17000 여명을 대상으로 조사한 자료에서 실업률을 계산해보면,
51.1% X 34.6% = 17.6% 정도로 나온다.
2015년 청년 실업률을 검색해보면 9.2% 로 나오는데, 차이가 꽤 많이 난다??

결론적으로, 양심 상 부모님과 함께 거주는 하되,
생활비 명목으로 부모님께 용돈을 드리는 것이 가장 베스트 케이스 일 것 같다.

우리 나라는 언제 실업률 걱정을 해소할 수 있을까..
옆 나라 일본은 최근 상당히 실업률이 줄어들었다고 한다.
나라 정세가 어지러운 지금.. 정말 훌륭한 정치인이 여럿 나와야 할 때이다 ㅜㅜ


 

방문자 수 10만 돌파 기념 이벤트!! (티스토리 초대장 배포)(마감)

Posted by ironmask84
2017. 2. 18. 21:56 ※공지


블로그 개설 8년 반 정도만에 방문자 수 10만을 돌파했습니다. 짝짝짝 ㅋㅋ

게을리한 기간이 많아서 개설 시작에 비해 초라한 수이지만,
조촐하게 이벤트를 진행해보려 합니다. ㅋㅋ

요즘도 티스토리 초대장이 필요하신분이 있을지.. 는 모르겠지만 ^^

댓글 달아주시는 분 선착순 5분에게 티스토리 초대장을 보내드립니다~
댓글 달아주실 때 초대장을 받으실 메일주소를 적어주세요~

마감되었습니다~~

언제 끝날지 모를? 이벤트이지만 많은 성원 부탁드립니다.  :)

앞으로도 제 맘대로? 양질의 포스팅을 위해 노오오력을 하는 블로그 운영이 계속될 예정이오니,
많은 방문과 댓글 부탁드립니다. ㅋㅋ


2017-2-18 ~ 2017-4-10 기간인 거의 2달만에 이벤트가 끝났네요 ㅋㅋ
다음 이벤트때 뵙겠습니다~~