SetUID 정보보안

유닉스 해킹의 기본 SetUID
SetUID는 유닉스 해킹하는 데 가장 중요한 요소입니다.

거의 모든 유닉스 해킹은 SetUID를 이용한다고 말해도 과언이 아닐정도 입니다.

먼저 SetUID란? 

유닉스 파일 시스템에서는 각각의 파일마다 권한이 설정되어 있습니다. 

rwxrwxrwx 이런식으로 r = 읽기권한 w = 쓰기권한 x = 실행권한입니다.

앞에서 3개 단위로 파일의 소유자, 소유자가 속한 그룹, 아무나 이렇게 권한을 설정합니다

예를 들면 rwxr-x--x 이런 권한의 파일이 있다면 파일의 소유자는 읽기 쓰기 실행의 권한이 있고

소유자가 속한 그룹의 유저는 읽기 실행권한, 아무나는 실행의 권한만 있게 됩니다.

각각을 비트로 표현하면 r = 4 w = 2 x = 1로 각 숫자를 더하여 표현합니다. 

위의 예를 비트로 표현하면 751 이 되는 겁니다.

SetUID는 조금 특이한 권한인데요 rwsr-x--x 이런식으로 표현하며, 비트로 4000 으로 표현합니다.

즉 rwsr-x--x 는 4751 이 되겠지요.

그럼 SetUID는 왜 있는 것일까요?

유닉스 계열을 OS를 사용하다보면 일반 유저 계정이라도 자기 자신의 패스워드는 

자기자신이 바꿀수 있습니다. 자신의 계정의 암호를 바꿀수 없다면 말이 안되죠

그럼 유닉스의 암호를 저장해 놓는 파일인 shadow파일의 권한을 한번 보겠습니다.

관리자 계정인 root도 읽기 권한 밖에 없습니다.

이러한 패스워드가 저장되어 있는 파일을 아무나 읽을수 있다면 당연히 말이 안되겠지요

그러나 일반 유저도 저 파일을 읽고 쓸수 있어야 패스워드를 변경할 수 있겠죠?

그래서 나온것이 SetUID입니다.

암호를 바꾸는 명령어인 passwd 파일의 권한을 한번 보겠습니다.

SetUID가 설정이 된것이 보입니다.

SetUID가 설정된 파일은 실행 되는 동안에 잠깐 관리자 권한을 빌려오고,

작업을 마친후엔 다시 권한을 돌려주게 되는것입니다.


그래서 일반 유저라도 자신의 패스워드는 변경 할 수 있는 것입니다.

유닉스에서는 관리 목적상 이러한 SetUID가 설정된 파일들이 많이 있습니다. 한 50여개로 알고 있는데요

여튼 이 SetUID를 이용한 유닉스 해킹을 해보겠습니다.

만약 쉘에 SetUID가 걸려있다면 어떻게 될까요? 

쉘이 실행되는 동안 관리자 권한으로 모든 작업을 할수 있게됩니다.

일반 계정 suer100의 홈디렉토리에 ksh를 복사하고 

chmod를 이용하여 ksh에 SetUID를 설정합니다.

user100계정의 홈디렉토리에 있는 콘쉘에 SetUID가 걸린것을 확인 할 수 있습니다.

그럼 이제 user100으로 로그인을 하여 ksh을 실행 해 보겠습니다.

프롬프트가 $인걸로 보아 일반 계정인걸 알수 있습니다.

id 를 처보니 일반 계정인것을 확실히 알수 있습니다.

이제 ksh을 실행 합니다.

실행하는 동시에 프롬프트가# 으로 바뀌고, id를 처보니 euid=0 (root) 라고 생깁니다.

이것은 root 권한을 잠깐 빌려온것을 뜻합니다.

즉 콘쉘이 끝나기 전까진 루트 권한으로 작업을 할 수 있다는 것입니다.

shadow파일도 읽을 수 있는걸 확인 할 수 있습니다.

그럼 이런 쉘파일에 SetUID를 어떻게 거느냐가 해킹의 관건이 되겠지요?

아주 간단하게 쉘 스크립트를 짜서 (저정도 쉘 스크립트느 4-5줄 안으로 끝납니다.)

메일에 첨부해서 관리자에게 보내게 되면, 관리자가 그 메일을 읽는 동시에

스크립트가 실행 되게끔 하면 일은 간단합니다.

그리하야 관리자들은 이런 SetUID가 걸린 파일들의 관리가 중요합니다.

이런 파일들은 목록화 하여 MD5라는 해쉬 알고리즘을 이용해 관리 하는 것이 필요합니다.

자칫 잘못하면 권한이 없는 사용자가 시스템을 망가트리는 경우가 생길 수도 있는 것입니다.


출처 : http://superuser.egloos.com/2314778


[안드로이드] 큰이미지 스크롤하기 - ScrollView

안드로이드에서 화면 스크롤을 구성하는 것은 ScrollView를 사용하여 아래와 같이 간단하게 처리할 수 있다.

android:paddingRight="5px" 는 스크롤을 위한 여백을 주기 위해 사용 한다.

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:paddingRight="5px"
    >
        여기에 화면 구성
</LinearLayout>
</ScrollView>


[안드로이드] ImageButton에 selector 적용하기 Android

1. res/drawable에 abc.xml생성

 - 전제조건 : kr_7.png, kr_1.png가 이미 존재

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="true" android:drawable="@drawable/kr_7" /> <!-- pressed --> 
 <!--<item android:state_focused="true" android:drawable="@drawable/kr_7" /> focused-->
 <item android:drawable="@drawable/kr_1" /> 
 <!-- default -->
</selector>

 

2. 레이아웃 xml에서는

<ImageButton android:id="@+id/BtnNoqtKor01"
   android:layout_width="wrap_content" android:layout_height="wrap_content"
   android:onClick="BtnOnClickImeNoqwertyKorean" android:layout_margin="2dip"
   android:src="@drawable/abc" android:background="#00000000" />

* background에 #00000000을 넣어주지 않으면 안드로이드 기본 버튼 위에 이미지를 그린다.



[안드로이드] fade in, fade out Android

activity 아래 내용 적용

Fade Button Listener 함수
: Fade Button을 누르면 현재 화면에서 Controls1 Activity 화면으로 변화를 준다. 

    private OnClickListener mFadeListener = new OnClickListener() {
        public void onClick(View v) {            
            startActivity(new Intent(Animation.this, Controls1.class));            
            overridePendingTransition(R.anim.fade, R.anim.hold);
        }
    };



res 폴더에 anim 폴더를 만들고
아래내용을 참고로 fade.xml과 hold.xml 파일을 생성한다.

▦ anim.fade Animation 파일 내용
맨 처음 투명했다가 나중엔 불투명하게 변경된다.
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:fromAlpha="0.0" android:toAlpha="1.0"
       android:duration="@android:integer/config_longAnimTime" />

▦ anim.hold Animation 파일 내용
에니메이션이 끝날때까지 X좌표가 0인 지점에 위치한다(변동없이 고정)

<translate xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:fromXDelta="0" android:toXDelta="0"
       android:duration="@android:integer/config_longAnimTime" />


[안드로이드] 환경설정(Preference) 다루기 -2

Main Activy에서 Perference 값 가져오기

...
boolean v =false;
v = getPrefs(R.string.setting_update);
...

public boolean getPrefs(int resId) {
boolean v =false;
SharedPreferences sPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String key = getBaseContext().getString.(resId);
try {
v = sPrefs.getBoolean(key, false);
} catch (ClassCastException e) {
}
return v;
}

1 2 3 4 5 6 7 8 9 10 다음